2017-07-04 15 views
0

我想打一个Web服务的单元测试(REST-球衣)这是我的网络服务看怎么喜欢模拟Java Web服务休息谁调用静态外部梅索德

public class WebService { 

     public string webServiceMethode { 
       ... 
       String a = ExternalClass.staticMethode("aa"); 
       .. 
       return b 

      } 
    } 

,你可以看到Web服务梅索德调用静态梅索德在外部类,测试类我的想法是调用的休息保证的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()将替换e的返回值外部静态方法,所以这个调用很好,但不是模拟。

预先感谢您的帮助

回答

0

A)明白静态好OOP中的异常。它杀死多态性,并导致你的类之间的耦合超级紧张。 理智要做的事情:避免使用静态这样。

静态就可以OK,但只要它阻碍了你做的(容易)单元测试,你做错了什么能力

所以,我的第一个答案是:摆脱那个静态方法。 B)如果您想继续做错误的事情(使用PowerMock) - 只需阅读tutorialsdocumentation即可。为了使静态模拟工作有各种各样的要求。您需要使用@Runner(PowerMockRunner),并且您需要使用@PrepareForTest注释(对于您想要模拟静态类的类)。因此,PowerMock可以进入并操纵生产代码的字节代码,以便它可以发挥它的魔力。