Spring Boot - Test for controller fails with 404 code

后端 未结 8 1189
一个人的身影
一个人的身影 2021-01-04 18:17

I want to write a test for controller. Here is test snippet:

@RunWith(SpringRunner.class)
@WebMvcTest(WeatherStationController.class)
@ContextConfiguration(c         


        
8条回答
  •  予麋鹿
    予麋鹿 (楼主)
    2021-01-04 18:38

    HTTP code 404, means no resource found (on the server) for your request, which I think that your controller is not visible(let me say is not scanned) by spring boot.

    A simple solution is scanning a parent package in MockConfig class, so spring can pick up all beans,

    @ComponentScan(basePackages = "edu.lelyak") // assuming that's the parent package in your project
    

    if you don't like this approach, you can add the controller's package name in basePackages

    @ComponentScan(basePackages = {"edu.lelyak.controller","edu.lelyak.repository") 
    

    BTW, you don't have to manually set up WeatherStationService in MockConfig class, Spring boot can inject a mock for you and automatically reset it after each test method, you should just declare it in your test class:

    @MockBean
    private IStationRepository stationRepository;
    

    On the other hand, you should mock weatherService.getAllStations() before calling get("/stations") in your test method (as you're not running integration test), so you can do:

    List myList = ...;
    //Add element(s) to your list
     Mockito.when(stationService.getAllStations()).thenReturn(myList);
    

    You can find more in :

    • Testing improvements in Spring Boot 1.4

    • Spring Boot features: Testing

提交回复
热议问题