Второй тест не пройден, заглушки 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»