Я создал сервис с двумя конечными точками и хочу охватить обе конечные точки интеграционными тестами. Чтобы эти интеграционные тесты не доходили до других служб, я использую класс MockRestServiceServer
для проверки вызовов и ответов на другие службы HTTP.
TestOperationA:
@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
, но безрезультатно. Кто-нибудь знает, почему это происходит?