如果我有课
public final class Application {
public static String getName() { return "Bad App"; }
}
然后我如何更改行为并让getName
返回,例如"Good App"
?
我需要模拟它,以便测试中的类获得预期值。
实际上,静态方法会进行一些我想要避免的网络调用。
我无法重写应用程序的代码。
我使用的是Java 6,Maven,JUnit和Mockito。
有可能吗?
答案 0 :(得分:4)
您可以使用powermockito进行以下操作:
假设这是使用静态方法的类:
public final class MyStaticClass {
public static String helloWorld() {
return "Hello World";
}
}
你想要嘲笑helloWorld方法,让它返回" Hi World"而是在测试时。您可以执行以下操作:
@RunWith(PowerMockRunner.class)
@PrepareForTest({MyStaticClass.class})
public class PowerMockItoTest {
@Test
public void mockStaticClassTest() {
PowerMockito.mockStatic(MyStaticClass.class);
final String mockedResult = "Hi World";
Mockito.when(MyStaticClass.helloWorld()).thenReturn(mockedResult);
Assert.assertEquals(AStaticClass.helloWorld(), mockedResult);
}
}
如果您想使用PowerMock,可以按照以下方式执行:
@RunWith(PowerMockRunner.class)
@PrepareForTest({MyStaticClass.class})
public class PowerMockTest {
@Test
public void testRegisterService() throws Exception {
PowerMock.mockStatic(MyStaticClass.class);
final String mockedResult = "Hi World";
expect(MyStaticClass.helloWorld()).andReturn(mockedResult);
replay(MyStaticClass.class);
Assert.assertEquals(AStaticClass.helloWorld(), mockedResult);
verify(MyStaticClass.class);
}
}