Несколько тестовых файлов и MockRestServiceServer, ожидающих звонки из другого тестового файла - PullRequest
0 голосов
/ 26 июня 2019

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

1 Ответ

0 голосов
/ 04 июля 2019

Очевидно, что некоторые вещи происходили в фоновом режиме, в результате чего некоторые переменные и методы больше не обновлялись, так как предыдущий тест уже обновил их. Когда я не пачкаю контекст приложения (например, имея больше MockBean), тогда все в порядке.

Так что те, кто корректирует значения в фоновом режиме, должны быть помечены как грязные.

...