多个测试文件和 MockRestServiceServer,期待来自其他测试文件的调用
Multiple testfiles and MockRestServiceServer, expecting calls from other testfile
我构建了一个有两个端点的服务,我想用集成测试覆盖这两个端点。为了防止这些集成测试到达其他服务,我使用 MockRestServiceServer
class 来模拟对其他 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()
和 .verify()
组合放在 @Before
和 @After
中,但没有效果。有人知道为什么会这样吗?
显然,后台发生了一些事情,导致某些变量和方法不再更新,因为之前的测试已经更新了它。当我不弄脏应用程序上下文(例如,通过使用更多 MockBean)时,一切都很好。
所以后台调整数值的应该标记为dirty
我构建了一个有两个端点的服务,我想用集成测试覆盖这两个端点。为了防止这些集成测试到达其他服务,我使用 MockRestServiceServer
class 来模拟对其他 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()
和 .verify()
组合放在 @Before
和 @After
中,但没有效果。有人知道为什么会这样吗?
显然,后台发生了一些事情,导致某些变量和方法不再更新,因为之前的测试已经更新了它。当我不弄脏应用程序上下文(例如,通过使用更多 MockBean)时,一切都很好。
所以后台调整数值的应该标记为dirty