Второй тест не пройден, заглушки Wiremock не сбрасываются после тестаJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Второй тест не пройден, заглушки Wiremock не сбрасываются после теста

Сообщение Anonymous »

У меня есть @SpringBootTest с двумя тестами службы (счастливый + отрицательный потоки), которая вызывает внешний API. Я использовал Wiremock, чтобы заглушить ответ этого API. Когда я запускаю каждый тест по отдельности, они проходят успешно, но когда я запускаю весь класс, второй тест терпит неудачу. Я предположил, что это из-за того, что заглушка не была должным образом очищена, и в качестве решения я выполнил WireMock.reset() перед каждым тестом. Это не решает проблему. Однако @DirtiesContext в первом тесте, похоже, исправляет это. Хотелось бы, чтобы мне не приходилось использовать эту аннотацию, поскольку она замедляет тесты и в целом является плохой практикой обновлять контекст Spring после каждого теста.
Тесты выглядят следующим образом:

Код: Выделить всё

@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@ActiveProfiles("test")
@AutoConfigureWireMock(port = 0)
public class ServiceClientTest{

private static final String EXPECTED_NAME = "dummy";
private static final String ID = "123";
private static final String PERSON_NUMBER = "1234";
// under test
@Autowired
private ServiceClient serviceClient;

@AfterEach
public void setUp() {
WireMock.reset();
}

@Test
//    @DirtiesContext -> this fixes the tests
public void testGetName() {
stubFor(post(urlPathEqualTo("/externalAPI")).withRequestBody(equalToJson(getBody()))
.willReturn(aResponse()
.withHeaders(createRestResponseHeaders())
.withStatus(200)
.withBody(getResponse())));

Name name = serviceClient.getName(PERSON_NUMBER, ID);

assertThat(name.getValue()).isEqualTo(EXPECTED_NAME);
verify(postRequestedFor(urlPathEqualTo("/externalAPI")));
}

@Test
public void testGetName_BadRequest() {
WireMock.stubFor(WireMock.any(urlPathEqualTo("/externalAPI"))
.willReturn(aResponse()
.withHeaders(createRestResponseHeaders())
.withStatus(HttpStatus.BAD_REQUEST.value())));

assertThatThrownBy(() ->
serviceClient.getName(PERSON_NUMBER, ID))
.isInstanceOf(BadResponseException.class);

verify(postRequestedFor(urlPathEqualTo("/externalAPI")));
}

private static HttpHeaders createRestResponseHeaders() {
return new HttpHeaders(
new HttpHeader("Accept", "application/json"),
new HttpHeader("Content-type", "application/json")
);
}
}
Попробовал WireMock.reset() для сброса заглушек перед каждым тестом.
Попробовал добавить сценарии к каждой заглушке.

Подробнее здесь: https://stackoverflow.com/questions/786 ... after-test
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»