我正在尝试创建我的第一个集成测试,从jhipster项目中获得启发。
在我的设置中,我使用这种代码:
CampaignController campaignController = new CampaignController();
ReflectionTestUtils.setField(campaignController, "securityService", securityService);
ReflectionTestUtils.setField(campaignController, "campaignService", campaignService);
ReflectionTestUtils.setField(campaignController, "messageService", messageService);
MockMvc restMvcCampaignController = MockMvcBuilders.standaloneSetup(campaignController).setMessageConverters(TestUtil.getCustomJsonMessageConverter()).build();
RestAssuredMockMvc.mockMvc(restMvcCampaignController);
服务是自动装配的类。
我想知道“ ReflectionTestUtils.setField”是否是一种好的做法,或者还有什么我可以使用的更好的方法?
谢谢
最佳答案
这不是一个好习惯。除了使无法设置依赖项(而不是通过反射)之外,还可以通过构造函数注入依赖项。例如
@Controller
public class Controller {
private CampaignService campaignService;
@Autowired
public Controller(CampaignService campaignService, MessageService messageService) {
//bind fields
}
}
现在,您可以轻松地从测试中实例化控制器。