如何用Mockito测试Spring Boot中返回ModelAndView的Service方法
用Mockito测试返回ModelAndView的Service方法
完全可以对TestService中返回ModelAndView的getData(Model model)方法编写单元测试,以下是完整的测试实现及说明:
完整测试类代码
@ExtendWith(MockitoExtension.class) class TestServiceTest { @InjectMocks private TestService testService; @Mock private TestServiceRepository testServiceRepository; @Mock private Model model; @Test void getData_shouldAddDataToModelAndReturnCorrectModelAndView() { // 准备模拟数据 List<TestDTO> mockData = Arrays.asList(new TestDTO(), new TestDTO()); // 配置Mock仓库的行为:调用findAll时返回模拟数据 when(testServiceRepository.findAll()).thenReturn(mockData); // 调用待测试的方法 ModelAndView result = testService.getData(model); // 验证Model是否被正确调用:添加了名为"data"的属性,值为模拟数据 verify(model).addAttribute("data", mockData); // 验证返回的ModelAndView视图名称是否为"index" assertEquals("index", result.getViewName()); // 可选:直接验证ModelAndView中的模型数据是否正确 assertEquals(mockData, result.getModel().get("data")); } }
关键说明
- 无需使用
@SpringBootTest:这是单元测试,仅需@ExtendWith(MockitoExtension.class)即可,避免加载整个Spring上下文,提升测试速度。 - 模拟依赖:通过
@Mock注解模拟TestServiceRepository和Model,完全隔离数据库等外部依赖。 - 行为验证:
- 配置仓库方法的返回值,确保测试可控;
- 验证
Model的addAttribute方法是否按预期调用; - 检查返回的
ModelAndView的视图名称和模型数据是否符合业务预期。
内容的提问来源于stack exchange,提问作者user19296905
相关产品推荐
相关产品推荐

