Powermock 无法使用模拟API对此类进行单元测试
这是一个遗留代码,我无法使用Powermock进行单元测试。请使用Powermock或任何其他方式帮助我进行以下单元测试: 必须对ServiceAPI类进行单元测试Powermock 无法使用模拟API对此类进行单元测试,powermock,Powermock,这是一个遗留代码,我无法使用Powermock进行单元测试。请使用Powermock或任何其他方式帮助我进行以下单元测试: 必须对ServiceAPI类进行单元测试 public class ServiceAPI { public String getServiceKey(String serviceNumber){ String jndiUrl = getServURL(); return jndiUrl; } public Stri
public class ServiceAPI {
public String getServiceKey(String serviceNumber){
String jndiUrl = getServURL();
return jndiUrl;
}
public String getServURL(){
String url = ServiceLocator.getInstance().init();
return url;
}
}
public class ServiceLocator {
private static ServiceLocator serviceLocator = new ServiceLocator();
public static ServiceLocator getInstance(){
return serviceLocator;
}
public String init(){
return "Jndi Call has return fix name";
}
}
上面的类与下面的类有依赖关系,而下面的类必须被模仿
public class ServiceAPI {
public String getServiceKey(String serviceNumber){
String jndiUrl = getServURL();
return jndiUrl;
}
public String getServURL(){
String url = ServiceLocator.getInstance().init();
return url;
}
}
public class ServiceLocator {
private static ServiceLocator serviceLocator = new ServiceLocator();
public static ServiceLocator getInstance(){
return serviceLocator;
}
public String init(){
return "Jndi Call has return fix name";
}
}
我写了下面的测试
@RunWith(PowerMockRunner.class)
@PrepareForTest(ServiceLocator.class)
public class ServiceAPITest {
@Test
public void testGetServiceKey() {
ServiceLocator serviceLocator = PowerMockito.mock(ServiceLocator.class);
PowerMockito.mockStatic(ServiceLocator.class);
PowerMockito.when(ServiceLocator.getInstance()).thenReturn(serviceLocator);
PowerMockito.when(serviceLocator.init()).thenReturn("value");
ServiceAPI serviceAPI = new ServiceAPI();
serviceAPI.getServiceKey("20156");
}
}
未获得o/p。请帮忙您有什么问题?我不明白。这段代码工作正常,但不测试任何东西。您需要添加断言或验证块。实际上,它是大型代码的一部分,init()方法有一个jndi调用,当我尝试时,它没有返回模拟值。另外,我不明白我们是在模仿ServiceLocator两次,那么它到底是如何工作的呢?基于这个代码片段,很难猜出您的情况有什么错,因为它看起来很好,工作也很好。我看这里没有错。顺便说一下,您可能对这个测试框架感兴趣:。它可以用于与JNDI的集成测试。您可以了解PowerMock的工作原理。简而言之,您不会两次嘲笑ServiceLocator。或者更准确地说,您可以在不同的级别上模拟它:对象(实例)级别和类级别。在第一行中,您创建一个新的模拟ServiceLocator实例,然后将拦截器添加到该类的静态调用中。在
mockStatic
之后,Mockito可以像处理非静态调用一样处理静态调用。。谢谢你的回答,现在我也可以模拟真正的实现了。它不起作用了,因为那里没有更多的第三方jar,我错过了模拟那些依赖项的机会……非常感谢!你有什么问题?我不明白。这段代码工作正常,但不测试任何东西。您需要添加断言或验证块。实际上,它是大型代码的一部分,init()方法有一个jndi调用,当我尝试时,它没有返回模拟值。另外,我不明白我们是在模仿ServiceLocator两次,那么它到底是如何工作的呢?基于这个代码片段,很难猜出您的情况有什么错,因为它看起来很好,工作也很好。我看这里没有错。顺便说一下,您可能对这个测试框架感兴趣:。它可以用于与JNDI的集成测试。您可以了解PowerMock的工作原理。简而言之,您不会两次嘲笑ServiceLocator。或者更准确地说,您可以在不同的级别上模拟它:对象(实例)级别和类级别。在第一行中,您创建一个新的模拟ServiceLocator实例,然后将拦截器添加到该类的静态调用中。在mockStatic
之后,Mockito可以像处理非静态调用一样处理静态调用。。谢谢你的回答,现在我也可以模拟真正的实现了。它不起作用了,因为那里没有更多的第三方jar,我错过了模拟那些依赖项的机会……非常感谢!