WebFluxTest не может прочитать матричные переменные - PullRequest
0 голосов
/ 19 февраля 2020

Я пишу WebFluxTest:

@WebFluxTest(controllers=Example.class)

class ExampleTest  {
    @Autowired
    WebTestClient webTestClient;
    @Test
    public void example(){

        webTestClient.get().uri("http://localhost:8080/example/employees/id=1")
                     .exchange()
                     .expectBody().consumeWith(response -> assertTrue(new String(response.getResponseBody(), StandardCharsets.UTF_8).contains(expected)));
    }
}

Код для тестирования:

@Controller
public class Example {

    @GetMapping("/example/employees/{id}")
    @ResponseBody
    public String example(@MatrixVariable("id") int id) {
        ....
    }

Это приложение Spring Boot с этой конфигурацией:

@Configuration
public class MyConfig implements WebMvcConfigurer {
   @Override
    public void configurePathMatch(PathMatchConfigurer configurer) {
        UrlPathHelper urlPathHelper = new UrlPathHelper();
        urlPathHelper.setRemoveSemicolonContent(false);
        configurer.setUrlPathHelper(urlPathHelper);
    }
...

Вывод: «status»: 400, «error»: «Bad Request», «message»: «отсутствует переменная матрицы« id »для параметра метода типа int»}

1 Ответ

0 голосов
/ 20 февраля 2020
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
 @AutoConfigureWebTestClient
class Example {

    @LocalServerPort
    int port;

    @Test
    public void example (){
        WebTestClient webTestClient = WebTestClient.bindToServer()
                     .baseUrl("http://localhost:"+port+"/example /employees/id=1").build();
        String expected = String.format("Received request id = [%d]\n", 1);
        webTestClient.get().exchange()
                       .expectBody().consumeWith(response -> assertTrue(new String(response.getResponseBody(),
                                               StandardCharsets.UTF_8).contains(expected)));
    }

Я спросил Spring Community. Кто-то предложил мне не использовать @WebFluxTest для тестирования контроллера mvc. Мой mvc контроллер не является контроллером веб-потоков. Кроме того, @WebFluxTest игнорирует WebMvcConfigurer. Мне нужно загрузить все загрузочное приложение Spring, как показано выше.

...