Я пытаюсь написать тест для простого контроллера в приложении SpringBoot. Тем не менее, я получаю ошибки из-за создания компонентов для моего TopicRepository и TopicController. Я ссылался на учебник и немного новичок в разработке загрузки Spring, поэтому не уверен, как именно она работает. Как заставить тест работать?
ControllerTest
@RunWith(SpringRunner.class)
@WebMvcTest(TopicController.class)
public class TopicControllerTest {
@Autowired
private MockMvc mvc;
@MockBean
private TopicService topicService;
@Test
public void whenGetTopics_returnJSONArray()
throws Exception {
Topic topic = new Topic("b","b name", "b descp");
List<Topic> allTopics = new ArrayList<>();
allTopics.add(topic);
Mockito.when(topicService.getAllTopics()).thenReturn(allTopics);
mvc.perform(get("/topics")
.contentType(MediaType.APPLICATION_JSON))
.andExpect(status().isOk())
.andExpect(jsonPath("$[0].id", is(topic.getId())));
}
}
Контроллер
@RestController
public class TopicController {
@Autowired
private TopicService topicService; //inject the topicService as a dependency
@Autowired
private TopicRepository topicRepository;
@RequestMapping("/topics")
public List<Topic> getAllTopics() {
return topicService.getAllTopics();
}
@RequestMapping("/topics/{name}")
public Topic getTopic(@PathVariable String name) {
return topicService.getTopic(name);
}
@RequestMapping(method=RequestMethod.POST, value= "/topics")
public void addTopic(@RequestBody Topic topic) {
topicService.addTopic(topic);
}
@RequestMapping(method=RequestMethod.PUT, value = "/topics/{Id}")
public void updateTopic(@RequestBody Topic topic, @PathVariable String Id){
topicService.updateTopic(topic, Id);
}
}
TopicRepository
public interface TopicRepository extends CrudRepository<Topic, String>{
}
Я получаю следующие ошибки:
UnsatisfiedDependencyException: Ошибка при создании bean-компонента с именем topicController: неудовлетворенная зависимость, выраженная через поле topicRepository; вложенное исключение - org.springframework.beans.factory.NoSuchBeanDefinitionException: отсутствует квалифицируемый компонент типа 'io.nkamanoo.springbootstarter.repository.TopicRepository': ожидается как минимум 1 компонент, который квалифицируется как кандидат для автоматической передачи. Аннотации зависимостей: {@ org.springframework.beans.factory.annotation.Autowired (обязательно = true)}