如果我有课
public final class Application {
public static String getName() { return "Bad App"; }
}
那么我怎样才能改变行为并使 getName
返回,比方说,"Good App"
?
我需要模拟它,以便被测类获得预期值。
实际上,静态方法进行了一些我想避免的网络调用。
我无法重写应用程序的代码。
我正在使用 Java 6、Maven、JUnit 和 Mockito。
这可能吗?
您可以使用 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);
}
}