Ошибка @WebMvcTest, потому что ищет компонент mongoTemplate - PullRequest
0 голосов
/ 10 июня 2018

Я пытаюсь запустить следующий тест, но он не проходит, потому что пытается найти mongoTemplate bean со следующей ошибкой:

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'mongoTemplate' available

Насколько я понимаю, слой data (илив этом случае MongoAutoConfiguration.class, MongoDataAutoConfiguration.class) не должен выполняться, но кажется, что это так.

Тест

@RunWith(SpringRunner.class)
@WebMvcTest(value = UserDetailsController.class)
public class UserDetailsControllerTest {

    @Autowired
    private MockMvc mockMvc;

    @MockBean
    UserRepository userRepository;


    @Test
    @WithMockUser
    public void apisAreAccessibleIfAuthenticated() throws Exception {
        mockMvc.perform(get("/user-details"))
                .andExpect(status().is(HttpStatus.OK.value()));
    }

}

Тестируемый класс

@RestController
public class UserDetailsController {


    private final UserRepository userRepository;

    @Autowired
    public UserDetailsController(UserRepository userRepository) {
        this.userRepository = userRepository;
    }

    @GetMapping("/user-details")
    public AppUser getUserDetails(Principal principal) {   
        return userRepository.findByUserName(principal.getName());
    }

}

Ответы [ 2 ]

0 голосов
/ 02 мая 2019

Этот ответ помог: https://stackoverflow.com/a/51454688/2214203.

Короче говоря: необходимо отделить конфигурацию деталей от конфигурации основного класса приложения.

0 голосов
/ 11 июня 2018

Вы создаете макет для UserRepository, но не реализуете заглушку для метода findByUserName.Вы должны добавить что-то подобное в свой тест перед выполнением get:

Mockito.when(userRepository.findByUserName(Mockito.any())).thenReturn(new AppUser());

...