Невозможно создать JUnit Test для Spring Boot Controller - PullRequest
0 голосов
/ 14 февраля 2020

Я пытаюсь написать тест для простого контроллера в приложении 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)}

1 Ответ

0 голосов
/ 14 февраля 2020

Вам необходимо аннотировать ваш тестовый класс с помощью @ SpringBootTest , чтобы он создал все определенные bean-компоненты и запустил ваше приложение для запуска тестовых случаев.

В вашем коде:

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