在Java/Mockito中模拟最终类中的静态方法
如果我有课在Java/Mockito中模拟最终类中的静态方法,java,mocking,mockito,powermock,Java,Mocking,Mockito,Powermock,如果我有课 public final class Application { public static String getName() { return "Bad App"; } } 那么,我如何改变行为并使getName返回,比如说,“好应用”? 我需要模拟它,以便测试中的类收到预期的值。 实际上,静态方法会进行一些我想要避免的网络调用 我不能重写应用程序的代码 我正在使用Java6、Maven、JUnit和Mockito 有可能吗?您可以使用powermockito进行如下操作
public final class Application {
public static String getName() { return "Bad App"; }
}
那么,我如何改变行为并使getName
返回,比如说,“好应用”
?
我需要模拟它,以便测试中的类收到预期的值。
实际上,静态方法会进行一些我想要避免的网络调用
我不能重写应用程序的代码
我正在使用Java6、Maven、JUnit和Mockito
有可能吗?您可以使用powermockito进行如下操作:
@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);
}
}
假设这是使用静态方法的类:
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);
}
}
您是否必须使用静态调用,而不是使用可以模拟的正常依赖项?您将需要powermockito或powermock。@JonSkeet我无法更改
应用程序或其使用方式,或者至少在不久的将来不能更改。。如果可以,我绝对愿意。@almasshaikh有什么可以分享的片段吗?你更喜欢power mock还是power mockito?我想powermockito?啊,你看MyStaticClass
必须是final
。这两种方法都可以。无法使用powerMock和EasyMock模拟Inet4Address.getLocalHost()