加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 移动互联 > 正文

使用 Spring Framework 时常犯的十大错误

发布时间:2019-07-29 17:23:51 所属栏目:移动互联 来源:锅外的大佬
导读:Spring 可以说是最流行的 Java 框架之一,也是一只需要驯服的强大野兽。虽然它的基本概念相当容易掌握,但成为一名强大的 Spring 开发者仍需要很多时间和努力。 在本文中,我们将介绍 Spring 中一些常见的错误,特别是面向 Web 应用程序和 Spring Boot。正

Misko Hevery 的 Google talk 深入解释了依赖注入的 “为什么”,所以,让我们看看它在实践中是如何使用的。在关注点分离(常见错误 #3)一节中,我们创建了一个服务和控制器类。假设我们想在 TopTalentService 行为正确的前提下测试控制器。我们可以通过提供一个单独的配置类来插入一个模拟对象来代替实际的服务实现:

  1. @Configuration 
  2. public class SampleUnitTestConfig { 
  3.  @Bean 
  4.  public TopTalentService topTalentService() { 
  5.  TopTalentService topTalentService = Mockito.mock(TopTalentService.class); 
  6.  Mockito.when(topTalentService.getTopTalent()).thenReturn( 
  7.  Stream.of("Mary", "Joel").map(TopTalentData::new).collect(Collectors.toList())); 
  8.  return topTalentService; 
  9.  } 
  10. }复制代码 

然后,我们可以通过告诉 Spring 使用 SampleUnitTestConfig 作为它的配置类来注入模拟对象:

  1. @ContextConfiguration(classes = { SampleUnitTestConfig.class })复制代码 

之后,我们就可以使用上下文配置将 Bean 注入到单元测试中。

10. 常见错误十:缺乏测试,或测试不当

尽管单元测试的概念已经存在很长时间了,但很多开发人员似乎要么 “忘记” 做这件事(特别是如果它不是 “必需” 的时候),要么只是在事后把它添加进来。这显然是不可取的,因为测试不仅应该验证代码的正确性,还应该作为程序在不同场景下应如何表现的文档。

在测试 Web 服务时,很少只进行 “纯” 单元测试,因为通过 HTTP 进行通信通常需要调用 Spring 的 DispatcherServlet,并查看当收到一个实际的 HttpServletRequest 时会发生什么(使它成为一个 “集成” 测试,处理验证、序列化等)。REST Assured,一个用于简化测试REST服务的 Java DSL,在 MockMVC 之上,已经被证明提供了一个非常优雅的解决方案。考虑以下带有依赖项注入的代码片段:

  1. @RunWith(SpringJUnit4ClassRunner.class) 
  2. @ContextConfiguration(classes = { 
  3.  Application.class, 
  4.  SampleUnitTestConfig.class 
  5. }) 
  6. public class RestAssuredTestDemonstration { 
  7.  @Autowired 
  8.  private TopTalentController topTalentController; 
  9.  @Test 
  10.  public void shouldGetMaryAndJoel() throws Exception { 
  11.  // given 
  12.  MockMvcRequestSpecification givenRestAssuredSpecification = RestAssuredMockMvc.given() 
  13.  .standaloneSetup(topTalentController); 
  14.  // when 
  15.  MockMvcResponse response = givenRestAssuredSpecification.when().get("/toptal/get"); 
  16.  // then 
  17.  response.then().statusCode(200); 
  18.  response.then().body("name", hasItems("Mary", "Joel")); 
  19.  } 
  20. }复制代码 

SampleUnitTestConfig 类将 TopTalentService 的模拟实现连接到 TopTalentController 中,而所有的其他类都是通过扫描应用类所在包的下级包目录来推断出的标准配置。RestAssuredMockMvc 只是用来设置一个轻量级环境,并向 /toptal/get 端点发送一个 GET 请求。

11. 成为 Spring 大师

Spring 是一个功能强大的框架,很容易上手,但需要一些投入和时间才可以完全掌握。长远来看,花时间熟悉框架肯定会提高你的生产力,并最终助你写出更干净的代码,成为更好的开发人员。

想寻找更多资源,Spring In Action 是一本涵盖了很多 Spring 核心主题的优秀实战书籍。

【编辑推荐】

  1. 浅谈Java Web经典三层架构和MVC框架模式
  2. 微软宣布 SQL Server 2019 免费支持 Java
  3. Python与C语言、Java、Nodejs、Golang进行性能测试比较
  4. 灵魂拷问:Java对象的内存分配过程是如何保证线程安全的?
  5. 5种用于前端开发的JavaScript替代方案
【责任编辑:华轩 TEL:(010)68476606】
点赞 0

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读