java - 使用 MockWebServiceServer 测试 Web 服务客户端:请求序列
问题描述
我需要使用 spring-ws-test 3.0.1.RELEASE 测试 Web 服务客户端。根据业务逻辑执行的请求顺序如下:
- 向路由器端点询问特定商店的 URL;
- 点击特定商店的 URL 以获得员工的许可做一些员工;
- 向路由器端点询问同一商店的 URL(重复请求有具体原因);
- 几乎总是点击同一个商店的 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
。
解决方案
这个问题部分地揭示了答案。由于我有 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 个期望。
推荐阅读
- sitefinity - sitefinity 参数 ActionResult 方法
- c# - unity c# for ... while ..代码崩溃,计算用户按键和用户按键的时间
- mysql - 当我运行以下命令时,GROUP BY 不工作:SELECT jobtitle,salary,COUNT(*) FROM employees GROUP BY 薪水;
- c# - Universal Analytics C# SDK 是否与 GA4 兼容?
- graphviz - 三列graphviz
- python - 如何在 discord.py 中使用 datetime 获取当前时间(不是 24 小时)?
- javascript - 多事件处理
- python - 如何对输入应用限制(不超过 20 个字母)并且输入值可以只是字母?
- angular - 如何验证 Angular 中 FormGroup / FormControl 数组元素的 maxLength?
- javascript - 无法使用 cordova-plugin-local-notification 关闭通知声音