Bot*_*ten 5 java mocking mockito powermock
如果我有课
public final class Application {
public static String getName() { return "Bad App"; }
}
Run Code Online (Sandbox Code Playgroud)
那么我怎样才能改变行为并做出getName回报,比如说"Good App"?我需要模拟它,以便被测试的类收到预期的值。实际上,静态方法会进行一些我想避免的网络调用。
我无法重写应用程序的代码。
我正在使用 Java 6、Maven、JUnit 和 Mockito。
是否可以?
您可以使用 powermockito 来完成此操作,如下所示:
假设这是您的带有静态方法的类:
public final class MyStaticClass {
public static String helloWorld() {
return "Hello World";
}
}
Run Code Online (Sandbox Code Playgroud)
并且您想模拟 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);
}
}
Run Code Online (Sandbox Code Playgroud)
如果你想使用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);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5765 次 |
| 最近记录: |