我正在尝试创建我的第一个集成测试,从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
    }
}


现在,您可以轻松地从测试中实例化控制器。

08-07 15:02