Попытка использовать Mock Mvc вместе с Wiremock - PullRequest
2 голосов
/ 06 февраля 2020

Я пытаюсь сделать ложный вызов Mvc, запущенный вместе с wiremock. Но ложный вызов Mvc ниже в коде продолжает выдавать 404 вместо ожидаемого кода состояния HTTP 200.

Я знаю, что работает wiremock .. Я могу сделать http://localhost: 8070 / lala через браузер, когда работает Wiremock.

Может кто-нибудь посоветовать, пожалуйста?


@RunWith(SpringRunner.class)
@SpringBootTest(classes = TestApp.class)
@AutoConfigureMockMvc
public class MyControllerTest { 


    @Inject
    public MockMvc mockMvc;

    @ClassRule
    public static final WireMockClassRule wireMockRule = new WireMockClassRule(8070);

    @Rule
    public WireMockClassRule instanceRule = wireMockRule;

    public ResponseDefinitionBuilder responseBuilder(HttpStatus httpStatus) {
        return aResponse()
                .withStatus(httpStatus.value());
    }

    @Test
    public void testOne() throws Exception {
        stubFor(WireMock
                .request(HttpMethod.GET.name(), urlPathMatching("/lala"))
                .willReturn(responseBuilder(HttpStatus.OK)));

        Thread.sleep(1000000);

        mockMvc.perform(MockMvcRequestBuilders.request(HttpMethod.GET, "/lala")) .andExpect(status().isOk());
    }

}

1 Ответ

1 голос
/ 06 февраля 2020

По умолчанию @SpringBootTest запускается в смоделированной среде и, следовательно, не имеет назначенного порта, документы

Еще один полезный подход - не запускать сервера, но только для тестирования уровня ниже того, где Spring обрабатывает входящий HTTP-запрос и передает его вашему контроллеру. Таким образом, используется почти весь стек, и ваш код будет вызываться точно так же, как если бы он обрабатывал настоящий HTTP-запрос, но без затрат на запуск сервера

so MockMvc не указывает на wiremockport (8070), который точно говорит 404. Если вы хотите выполнить тест с Wiremock, вы можете использовать HttpClients как здесь

CloseableHttpClient httpClient = HttpClients.createDefault();
HttpGet request = new HttpGet("http://localhost:8070/lala");
HttpResponse httpResponse = httpClient.execute(request);

Или вы можете просто использовать функцию тестирования интеграции с пружинной загрузкой, высмеивая любую службу, вызываемую из контроллера, как показано здесь

...