spring - 多个测试文件和 MockRestServiceServer,期待来自其他测试文件的调用
问题描述
我已经构建了一个具有两个端点的服务,并且我想通过集成测试来覆盖这两个端点。为了防止这些集成测试到达其他服务,我使用MockRestServiceServer
该类来模拟对其他 HTTP 服务的调用和响应。
测试操作A:
@RunWith(SpringRunner.class)
@SpringBootTest
@ActiveProfiles({"integration"})
@ComponentScan(basePackages = "nl.xyz")
public class OperationAIntegrationTest {
MockRestServiceServer mockServer;
@Autowired
RestTemplate restTemplate;
@Autowired
OperationA operationA;
@Before
public void setup() {
this.mockServer = MockRestServiceServer.bindTo(restTemplate).bufferContent().ignoreExpectOrder(true).build();
this.mockServer.reset();
}
@After
public void finish() {
// Verify all method calls are run after the testcase.
this.mockServer.verify();
this.mockServer.reset();
}
然后测试用例包含以下内容:
this.mockServer.expect(requestTo(ENDPOINT_OAUTH))
.andExpect(method(HttpMethod.POST))
.andRespond(withSuccess(objectMapper.writeValueAsString(oAuthToken), MediaType.APPLICATION_JSON));
我对 OperationBIntegrationTest 做同样的事情。这包括绑定到restTemplate
!
现在的问题是,如果我单独运行所有测试用例,一切都会成功。如果我从 OperationA 或 OperationB 运行所有测试用例,它们都会成功。但是,当我运行所有测试用例以便依次执行来自 OperationA 和 OperationB 的集成测试时,来自 OperationB 的测试用例会失败。即使我看到当测试框架跳转到第二个测试文件时 Spring Boot 会重新启动。
我在想MockRestServiceServer
没有得到清理或者我在绑定到RestTemplate
. 我尝试了.reset()
and.verify()
组合,将它们放在@Before
and中@After
,但没有效果。有谁知道为什么会这样?
解决方案
显然,后台发生了一些事情,导致某些变量和方法不再更新,因为之前的测试已经更新了它。当我不弄脏应用程序上下文时(例如,通过拥有更多的 MockBean),一切都会好起来的。
所以在后台调整值的应该被标记为脏。
推荐阅读
- odata - 在 .Net Core 3.1 OData EDMModelBuilder 中公开私有设置器
- c++ - 尝试使用 CreateFileMapping 和自定义 DACL 创建只读共享内存区域在 OpenFileMapping 中失败
- laravel - 更改 Laravel Web Tinker 公共文件目录 - 防止保存时出现 403 错误
- powerbi - 如何使用 PowerBI DAX 瀑布图计算方差
- python - 收到此错误 InvalidArgumentError: Default MaxPoolingOp only support NHWC on device type CPU [[node sequences_5/max_pooling2d_5/MaxPool
- git - 如何在 GitHub 上保留最新版本的二进制文件而不完全跟踪它们?
- python - 无法导入 IMDB
- c# - 在鼠标进入或拖动完成时锁定 ContentPresenter 的 zIndex
- java - 为什么即使条件为假,我的 while 循环仍在运行?
- ruby-on-rails - ActionController::RoutingError(没有路由匹配“/javascripts/defaults.js