3

我有这门课要测试。此测试使用 mockMvc 对象。我认为这个对象发送 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 用 mocked 模拟发送到控制器的 http 请求candidateService

真的吗?

4

1 回答 1

0

candidateService为您的CandidateController班级创建一个二传手。

在您的CandidateControllerTest中,从 获取CandidateControllerbeanWebApplicationContext并使用 setter 设置模拟。

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

我不推荐这个。如果您只是单独测试CandidateController ,这会很好。但是你在后面测试它MockMvc,也就是集成测试。模拟不属于正在测试的堆栈。

于 2013-10-16T17:35:35.473 回答