import static org.powermock.api.mockito.PowerMockito.*;
import static org.junit.Assert.*;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
import org.powermock.reflect.Whitebox;
@RunWith(PowerMockRunner.class)
@PrepareForTest({StaticClass.class, FinalClass.class})
public class MyClassTest {
@Test
public void testStaticMethod() throws Exception {
mockStatic(StaticClass.class);
when(StaticClass.staticMethod()).thenReturn("Mocked");
MyClass myClass = new MyClass();
String result = myClass.callStaticMethod();
assertEquals("Mocked", result);
verifyStatic(StaticClass.class);
StaticClass.staticMethod();
}
@Test
public void testPrivateMethod() throws Exception {
MyClass myClass = spy(new MyClass());
doReturn("Mocked").when(myClass, "privateMethod");
String result = myClass.callPrivateMethod();
assertEquals("Mocked", result);
verifyPrivate(myClass).invoke("privateMethod");
}
@Test
public void testFinalClass() throws Exception {
FinalClass finalClassMock = mock(FinalClass.class);
whenNew(FinalClass.class).withNoArguments().thenReturn(finalClassMock);
when(finalClassMock.finalMethod()).thenReturn("Mocked");
MyClass myClass = new MyClass();
String result = myClass.callFinalMethod();
assertEquals("Mocked", result);
verifyNew(FinalClass.class).withNoArguments();
verify(finalClassMock).finalMethod();
}
}