我上这堂课要测试。此测试使用模拟对象。我认为该对象发送http请求,并且这些请求处理从pathToFile.xml进行配置的控制器

    @ContextConfiguration(locations = { "classpath:/pathToFile.xml" })
    @WebAppConfiguration
    @RunWith(SpringJUnit4ClassRunner.class)
    public class CandidateControllerTest {
        @Autowired
        WebApplicationContext wac;

        MockMvc mockMvc;

        @Before
        public void before() {
           mockMvc = MockMvcBuilders.webApplicationContextSetup(wac).build();

        }
...
}


我认为有时候我想将控制器与其他配置一起使用。

这是什么意思?

CandidateControllerTest测试CandidateController类的方法

@Controller
CandidateController{

   @Autowire
   CandidateService candidateService;

   @RequestMapping("/path")
   public string handleSomething(Model model){
    ...
      candidateService.doSomething();
    ...
      return "viewName"

   }

}


我想用模拟的candidateService模拟candidateService发送给控制器的http请求

真的吗

最佳答案

candidateService类中为CandidateController创建一个setter。

在您的CandidateControllerTest中,从CandidateController获取WebApplicationContext bean,然后使用setter来设置模拟。

CandidateService candidateServiceMock = ...; // mock it
CandidateController cc = (CandidateController) wac.getBean(CandidateController.class);
cc.setCandidateService(candidateServiceMock);




我不建议这样做。如果您只是单独测试CandidateController,那就很好。但是,您正在MockMvc后面进行测试,这是集成测试。模拟不属于要测试的堆栈。

10-06 05:51