繁体   English   中英

在不运行服务器的情况下测试WebService的响应代码

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM