![](/img/trans.png)
[英]Response code is null while executing Axis2 webservice client in java but webservice executed successfully at the server end
[英]Testing the Response code of a WebService without a running server
我想用JUnit(EasyMock和Hamcrest)測試我的WebService,而不必啟動服務器(Wildfly)
private RegisterUserWebService testeee = new RegisterUserWebService();
@Test
public void test() {
// Set Mocks for testee
// ...
//
Response response = testee.registerUser();
verifyAll();
assertThat(response.getStatusInfo().getStatusCode(), equalTo(Status.CONFLICT));
}
我收到ClassNotFoundException:
java.lang.RuntimeException: java.lang.ClassNotFoundException: org.glassfish.jersey.internal.RuntimeDelegateImpl
at javax.ws.rs.ext.RuntimeDelegate.findDelegate(RuntimeDelegate.java:152)
at javax.ws.rs.ext.RuntimeDelegate.getInstance(RuntimeDelegate.java:120)
at javax.ws.rs.core.Response$ResponseBuilder.newInstance(Response.java:848)
at javax.ws.rs.core.Response.status(Response.java:590)
at javax.ws.rs.core.Response.status(Response.java:601)
at my.package.webservices.RegisterUserWebService.registerUser(RegisterUserWebService.java:50)
據我了解,找不到javax.ws.rs.core.Response的實現,默認的實現似乎是我沒有的玻璃魚,因此是ClassNotFoundException。
我怎樣才能告訴我的測試使用Wildfly的回應? 還是有另一種方法?
似乎您對什么單元測試有點誤解:基本上,單元測試用於測試在構建時存在的最小“單元”(如類,方法); 因此,換句話說:與真實文件系統,服務器,數據庫等沒有任何連接。
這意味着,您可以使用JUnit來測試您的類,以“准備”應該放在某個地方的輸入。 或者您可以測試處理來自某個地方的“結果”的類。 在這兩種情況下,您都可以使用模擬框架(例如EasyMock或Mokito)來偽造為您的類提供輸入的外部部分。
因此,一些偽代碼向您展示可能有效的方法:
RegisterUserWebService mockedService = ... create mock ...
Response mockedResponse = ... create mock ...
expect(mockedService.getStatusInfo() ...)
expect(mockedService.registerUser( params to match on )).andReturn(mockedResponse)
YourComponent underTest = new YourComponent ( mockedService )
underTest.doSomething()
verify ( that your mocks saw the calls you expected to happen )
其他所有內容都不是單元測試,而是功能/集成測試(因為它們需要其他組件才能啟動和運行)
因此,您決定:可以進行單元測試,但是范圍會有所不同; 或者您專注於在此處編寫功能測試。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.