Misko Hevery 的 Google talk 深入表明白依靠注入的 “为什么”,以是,让我们看看它在实践中是怎样行使的。在存眷点疏散(常见错误 #3)一节中,我们建设了一个处事和节制器类。假设我们想在 TopTalentService 举动正确的条件下测试节制器。我们可以通过提供一个单独的设置类来插入一个模仿工具来取代现实的处究竟现:
- @Configuration
- public class SampleUnitTestConfig {
- @Bean
- public TopTalentService topTalentService() {
- TopTalentService topTalentService = Mockito.mock(TopTalentService.class);
- Mockito.when(topTalentService.getTopTalent()).thenReturn(
- Stream.of("Mary", "Joel").map(TopTalentData::new).collect(Collectors.toList()));
- return topTalentService;
- }
- }复制代码
然后,我们可以通过汇报 Spring 行使 SampleUnitTestConfig 作为它的设置类来注入模仿工具:
- @ContextConfiguration(classes = { SampleUnitTestConfig.class })复制代码
之后,我们就可以行使上下文设置将 Bean 注入到单位测试中。
10. 常见错误十:缺乏测试,或测试不妥
尽量单位测试的观念已经存在很长时刻了,但许多开拓职员好像要么 “健忘” 做这件事(出格是假如它不是 “必须” 的时辰),要么只是在过后把它添加进来。这显然是不行取的,由于测试不只应该验证代码的正确性,还应该作为措施在差异场景下应怎样示意的文档。
在测试 Web 处事时,很少只举办 “纯” 单位测试,由于通过 HTTP 举办通讯凡是必要挪用 Spring 的 DispatcherServlet,并查察当收到一个现实的 HttpServletRequest 时会产生什么(使它成为一个 “集成” 测试,处理赏罚验证、序列化等)。REST Assured,一个用于简化测试REST处事的 Java DSL,在 MockMVC 之上,已经被证明提供了一个很是优雅的办理方案。思量以下带有依靠项注入的代码片断:
- @RunWith(SpringJUnit4ClassRunner.class)
- @ContextConfiguration(classes = {
- Application.class,
- SampleUnitTestConfig.class
- })
- public class RestAssuredTestDemonstration {
- @Autowired
- private TopTalentController topTalentController;
- @Test
- public void shouldGetMaryAndJoel() throws Exception {
- // given
- MockMvcRequestSpecification givenRestAssuredSpecification = RestAssuredMockMvc.given()
- .standaloneSetup(topTalentController);
- // when
- MockMvcResponse response = givenRestAssuredSpecification.when().get("/toptal/get");
- // then
- response.then().statusCode(200);
- response.then().body("name", hasItems("Mary", "Joel"));
- }
- }复制代码
SampleUnitTestConfig 类将 TopTalentService 的模仿实现毗连到 TopTalentController 中,而全部的其他类都是通过扫描应用类地址包的下级包目次来揣度出的尺度设置。RestAssuredMockMvc 只是用来配置一个轻量级情形,并向 /toptal/get 端点发送一个 GET 哀求。
11. 成为 Spring 人人
Spring 是一个成果强盛的框架,很轻易上手,但必要一些投入和时刻才可以完全把握。久远来看,花时刻认识框架必定会进步你的出产力,并最终助你写出更干净的代码,成为更好的开拓职员。
想探求更多资源,Spring In Action 是一本涵盖了许多 Spring 焦点主题的优越拭魅战书本。 【编辑保举】 - 浅谈Java Web经典三层架构和MVC框架模式
- 微软公布 SQL Server 2019 免费支持 Java
- Python与C说话、Java、Nodejs、Golang举办机能测试较量
- 魂灵拷问:Java工具的内存分派进程是怎样担保线程安详的?
- 5种用于前端开拓的JavaScript更换方案
【责任编辑:华轩 TEL:(010)68476606】
点赞 0 (编辑:湖南网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|