【问题标题】:Testing Web Service client with MockWebServiceServer: sequence of requests使用 MockWebServiceServer 测试 Web 服务客户端:请求序列
【发布时间】:2018-08-15 13:34:37
【问题描述】:

我需要使用 spring-ws-test 3.0.1.RELEASE 测试一个 Web 服务客户端。按照业务逻辑执行的请求顺序如下:

  1. 向路由器端点询问特定商店的 URL;
  2. 点击特定商店的 URL 以获得员工做一些员工的许可;
  3. 向路由器端点询问同一商店的 URL(重复请求有具体原因);
  4. 几乎总是点击同一个商店的 URL 来代表员工做一些员工。

换句话说,我的测试命中了一个模拟的 Web 服务服务器四次。两次它使用相同的有效载荷到达路由器端点 (1, 3),两次它到达特定商店的 URL (2, 4),但有效载荷不同。

我想知道的是,我应该如何编写模拟 Web 服务服务器的期望来承受这样的负载?考虑到:

@RunWith(SpringRunner.class)
@SpringBootTest
public class SomeClientTest {
    @Autowired
    private SomeClient someClient;

    private MockWebServiceServer mockWebServiceServer;

    @Before
    public void setUp() {
        mockWebServiceServer = MockWebServiceServer.createServer(someClient);
    }

    @Test
    public void fourHitsMethodTest() {     
        //mocks the 1st and the 3rd responses
        mockWebServiceServer
        .expect(payload(getUrlRequest()))
        .andRespond(withPayload(getUrlResponse()));
        //mocks the 2nd response
        mockWebServiceServer
        .expect(payload(getEmployeesPermissionRequest()))
        .andRespond(withPayload(getEmployeesPermissionResponse()));
        //mocks the 4th response
        mockWebServiceServer
        .expect(payload(doSomeStaffRequest()))
        .andRespond(withPayload(doSomeStaffResponse()));
        //those 4 hits are been performed in fourHitsMethod()
        assertNotNull(someClient.fourHitsMethod("foo", "bar"));
        mockWebServiceServer.verify();
    }
}

java.lang.AssertionError: No further connections expected 失败。

【问题讨论】:

    标签: java web-services spring-ws spring-test


    【解决方案1】:

    问题部分揭示了答案。由于我有 4 个命中,我必须恭敬地宣布 4 个期望。并且按照我希望他们被调用的顺序。在引擎盖下MockWebServiceServer 删除每一个预期一旦被击中。以下工作正常:

    @RunWith(SpringRunner.class)
    @SpringBootTest
    public class SomeClientTest {
        @Autowired
        private SomeClient someClient;
    
        private MockWebServiceServer mockWebServiceServer;
    
        @Before
        public void setUp() {
            mockWebServiceServer = MockWebServiceServer.createServer(someClient);
        }
    
        @Test
        public void fourHitsMethodTest() {     
            //mocks only the 1st, but not the 3rd response
            mockWebServiceServer
            .expect(payload(getUrlRequest()))
            .andRespond(withPayload(getUrlResponse()));
            //mocks the 2nd response
            mockWebServiceServer
            .expect(payload(getEmployeesPermissionRequest()))
            .andRespond(withPayload(getEmployeesPermissionResponse()));
            //mocks the 3rd response
            mockWebServiceServer
            .expect(payload(getUrlRequest()))
            .andRespond(withPayload(getUrlResponse()));
            //mocks the 4th response
            mockWebServiceServer
            .expect(payload(doSomeStaffRequest()))
            .andRespond(withPayload(doSomeStaffResponse()));
            //those 4 hits are been performed in fourHitsMethod()
            assertNotNull(someClient.fourHitsMethod("foo", "bar"));
            mockWebServiceServer.verify();
        }
    }
    

    请注意与问题相比的期望差异。在这里,我对问题中的 3 个期望有 4 个期望。

    引用https://docs.spring.io/spring-ws/docs/current/api/org/springframework/ws/test/client/MockWebServiceServer.html对我来说不是很明显

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-04
      • 2019-08-07
      相关资源
      最近更新 更多