我的代码:
@Controller
public class Controller {
@Autowired
Service service;
@RequestMapping(value = "/")
public ModelAndView showPage() {
ModelAndView modelAndView = new ModelAndView();
Object object = service.findObject();
modelAndView.addObject("modelObject", object);
m.setViewName("page")
return modelAndView;
}
@Service
public class Service {
public Object findObject() {
// goes to database and finds object
return object;
}
我想测试隔离控制器(即控制器上的UnitTest)。
这是我测试的片段:
@Mock
Service serviceMock;
@InjectMocks
Controller controller;
@Test
when(serviceMock.findObject()).thenReturn(new Object());
mockMvc.perform(get("/")).
andExpect(model().attribute("modelObject", hasSize(1)));
所以这里的问题是:"期待"测试失败,因为模型是空的。实际上服务是模拟的(这就是我想要的,实际上我想要单独测试控制器),所以它不会进入数据库并且找不到对象。
我该怎么测试呢?如何模拟应将对象添加到模型中的事实?
答案 0 :(得分:1)
你是否尝试过愚蠢的简单方法,使用Moktio(或其他一些Mocking Framework)但没有Spring。
import static org.mockito.Mockito.*;
...
@Test
public void test(){
Service serviceMock = mock(Service.class)
when(serviceMock findObject()).thenReturn(new Object());
Controller controller new Controller();
controller.setService(serviceMock);
ModelAndView result = controller.showPage();
assertThat(model().attribute("modelObject"), hasSize(1));
}