Как я могу реально проверить ответ сервера контроллера, который имеет исключение нулевого указателя - PullRequest
0 голосов
/ 16 апреля 2019

Я хочу написать тест, который оценивает ответ контроллера, который имеет исключение NullPointerException при обработке запроса.

Для этой цели я написал контроллер, который выбрасывает NullPointer при обработке запроса. Используя контроллер MockMVC, я отправляю запрос GET этому контроллеру.

Контроллер, который выбрасывает нулевой указатель при обработке:

@Controller
public class Controller{  

    @GetMapping(value = "/api/data")
    @ResponseBody
    public ResponseEntity<Resource> getData() {

        if (true)
            throw new NullPointerException(); // Intended Nullpointer Exception 

        return ResponseEntity.notFound().build();
    }
}

Тестовая функция, которую я ожидаю получить ошибку 500:

@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc

public class Test {

    @Autowired
    protected MockMvc mockMvc;

    @Test
    public void shouldReturn500StatusWhenControllerThrowsAnException() throws Exception {
        MvcResult result = this.mockMvc.perform(get("/api/data"))
            .andExpect(status().is5xxServerError())
            .andReturn();
    }

}

Я ожидаю, что запрос MockMVC вернет ошибку 500, как настоящий контроллер, когда он работает как сервер. На самом деле вместо этого MockMVC просто завершается с ошибкой NullPointer и ничего не возвращает.

Ответы [ 2 ]

0 голосов
/ 17 апреля 2019

Я нашел решение, которое работает для меня, используя WebTestClient.

Добавлены две новые зависимости в мой build.gradle:

testCompile "org.springframework.boot:spring-boot-starter-webflux:2.1.3.RELEASE"
testCompile "org.springframework.boot:spring-boot-starter-test:2.1.3.RELEASE"

Тестовая функция выглядит так:

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class GlobalFilterTest {

    @Autowired
    private WebTestClient webTestClient;

    @Test
    public void shouldReturn500StatusWhenControllerThrowsAnException() throws Exception {

        webTestClient.get().uri("/api/data")
            .exchange()
            .expectStatus().is5xxServerError();

    }

}

Подобно тому, как запрос GET возвращает ошибку 500 точно так же, как и в реальных условиях.

0 голосов
/ 16 апреля 2019

РЕДАКТИРОВАТЬ после добавления дополнительной информации к исходному вопросу: У меня была та же проблема, попробуйте использовать эти аннотации вместо трех, которые у вас есть:

@RunWith(SpringRunner.class)
@WebMvcTest
@AutoConfigureWebClient
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...