我上这堂课要测试。此测试使用模拟对象。我认为该对象发送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
后面进行测试,这是集成测试。模拟不属于要测试的堆栈。