我想测试我的一个控制器,它最初访问我的服务。我的服务然后初始化存储库来存储数据。在我的www.example.com中ControllerTest.java,我用@Mockbean注解了我需要的存储库和服务,但是我得到了错误,例如存储库属性没有初始化并且为空。
这是开头的样子:
@ExtendWith(SpringExtension.class)
//In this test, we want to launch only StudentController. All other controllers and mappings will not be launched when this unit test is executed.
@WebMvcTest(value = TodoController.class)
@WithMockUser
public class TodoControllerTest {
// To launch only TodoController
@Autowired
private MockMvc mockMvc;
@MockBean
private TodoService todoService;
@MockBean
private ToDoRepository todoRepository;
@Test
public void retrieveDetailsForEintrag() throws Exception {
Todo mockTodo = new Todo("Drink", "01.11.2022");
todoRepository.save(mockTodo); //FIRST ERROR HERE
如何在Testingclass中初始化它们?谢谢!
尽管这是一个单元测试,我不想导入依赖项或其他类,但我还是想导入Repository。
1条答案
按热度按时间tpxzln5u1#
你为什么不
顺便说一句,请考虑单独测试各层:TodoControllerTest用来测试TodoController的方法是否被调用并返回一些东西(比如
mockMvc.perform(..)..andExpect(status().isOk())
),而另一个TodoServiceTest用来测试真实的的工作(毕竟,控制器只是进一步委托请求,并返回响应):在那里模拟对存储库的调用,并验证服务是否正常工作。最重要的是,试着使用一些真实的的存储库层,比如H2。有时候,由于太多的嘲笑,你没有真正测试你的代码。