模拟调用静态外部方法的JavaWeb服务Rest
我想对web服务(Rest-jersey)进行单元测试,这就是我的web服务的外观模拟调用静态外部方法的JavaWeb服务Rest,java,web-services,jersey,mocking,powermock,Java,Web Services,Jersey,Mocking,Powermock,我想对web服务(Rest-jersey)进行单元测试,这就是我的web服务的外观 public class WebService { public string webServiceMethode { ... String a = ExternalClass.staticMethode("aa"); .. return b }
public class WebService {
public string webServiceMethode {
...
String a = ExternalClass.staticMethode("aa");
..
return b
}
}
正如您可以看到的,web服务方法调用外部类中的静态方法,在测试类中,我的想法是通过Rest Assured调用web服务,并通过Powermock模拟静态方法,这里是我的测试方法逻辑
public class WebServicetest {
@Test
public void testWebServiceMethode {
mockStatic(ExternalClass.class);
when(ExternalClass.staticMethode(Mockito.any()))
.thenReturn("ok");
given().accept(CotentType.JSON)
.body(MyObject).when().post(new URI("/test"));
}
}
给定的()方法将调用web服务和when()。theReturn()将替换外部静态方法的返回,因此调用工作正常,而不是模拟
提前感谢您的帮助A)了解静态在良好的OOP中是一种异常。它消除了多态性,并导致类之间的超紧密耦合。明智的做法是:避免以这种方式使用static
静态测试也可以,但一旦它妨碍了您进行(简单的)单元测试的能力,您就做错了
所以,我的第一个答案是:摆脱静态方法
B) 如果您想继续做错误的事情(使用PowerMock),只需阅读或。为了使静态模拟工作正常进行,有各种各样的要求。您需要使用@Runner(PowerMockRunner),并且需要使用@PrepareForTest注释(对于要模拟静态类的类)。因此,PowerMock可以进入并操作生产代码的字节码,从而发挥其神奇的作用