JUnit 5中扩展模型的深入理解

  

  

先看来个公式:

  
  

JUnit 5=JUnit平台+ JUnit木星+ JUnit的

     

这看上去比Junit4复杂,实际上在导入包时也会复杂一些。

  

JUnit平台是在JVM上启动测试框架的基础。

  

JUnit木星是JUnit5扩展的新的编程模型和扩展模型,用来编写测试用例.Jupiter子项目为在平台上运行木星的测试提供了一个TestEngine(测试引擎)。

  

JUnit的提供了一个在平台上运行JUnit 3和JUnit 4的TestEngine。

  

  
      <李> JUnit 5是一个模块化和可扩展的测试框架、支持Java 8及更高版本。   <李> JUnit 5由三个部分组成,一个基础平台,一个新的编程和扩展模型木星,以及一个名为老式的向后兼容的测试引擎。   <李> JUnit 5木星的扩展模型可用于向JUnit中添加自定义功能。   <李>扩展模型API测试生命周期提供了钩子和注入自定义参数的方法(即依赖注入)。   
  

JUnit是最受欢迎的基于JVM的测试框架,在第5个主要版本中进行了彻底的改造.JUnit 5提供了丰富的功能,从改进的注解,标签和过滤器到条件执行和对断言消息的惰性求值。这让基于TDD编写单元测试变得轻而易举。新框架还带来了一个强大的扩展模型。扩展开发人员可以使用这个新模型向JUnit 5中添加自定义功能。本文将指导你完成自定义扩展的设计和实现。这种自定义扩展机制为Java程序员提供了一种创建和执行故事和行为(即BDD规范测试)的方法。

  

我们首先使用JUnit 5和我们的自定义扩展(称为“StoryExtension”)来编写一个示例故事和行为(测试方法)。这个示例使用了两个新的自定义注解“@Story”和“@Scenario”,以及“场景”类,用以支持我们的自定义StoryExtension:

        进口org.junit.jupiter.api.extension.ExtendWith;      进口ud.junit.bdd.ext.Scenario;   进口ud.junit.bdd.ext.Scene;   进口ud.junit.bdd.ext.Story;   进口ud.junit.bdd.ext.StoryExtension;      @ExtendWith (StoryExtension.class)   @Story (name="返回回到储备”,描述=啊?   公共类店面{      @Scenario(“退还物品应该返回到库存”)   公共空间refundedItemsShouldBeRestocked场景(场景){   场景   坚强(“客户买了一件蓝色的毛衣”,   ()→buySweater(现场,“蓝色”))      ,(“我有三个蓝色毛衣存货”,   ()→assertequal (sweaterCount(现场,“蓝色”),   “商店应该携带3蓝色毛衣”))      当(“客户返回退款”的蓝色毛衣,   ()→退款(现场,1,“蓝色”))      区间(“我应该有四个蓝色毛衣存货”,   ()→assertequal (4, sweaterCount(现场,“蓝色”),   “商店应该携带4蓝色毛衣”))   .run ();   }   }      

从代码片段中我们可以看的到,木星的扩展模型非常强大。我们还可以看的到,我们的自定义扩展及其相应的注解为测试用例编写者提供了简单而干净的方法来编写BDD规范。

  

作为额外的奖励,当使用我们的自定义扩展程序执行测试时,会生成如下所示的文本报告:

  
  

故事:返回回到库存
  ,
  作为店主,以跟踪股票,我想添加物品回到股票当他们返回。
  ,
  场景:退还物品应该返回股票
  ,,鉴于客户之前买了一件蓝色的毛衣从我
  ,,,,和我有三个蓝色毛衣库存
  ,,当用户返回退款的蓝毛衣
  ,,那么我应该有四个蓝色毛衣库存
  

     

这些报告可以作为应用程序功能集的文档。

  

自定义扩展StoryExtension能够借助以下核心概念来支持和执行故事和行为:

  
      <李>用于装饰测试类和测试方法的注解   <李> JUnit 5木星的生命周期回调李   <李>动态参数解析   
  

  

示例中的“@ExtendWith”注解是由木星提供的标记接口。这是在测试类或方法上注册自定义扩展的方法,目的是让木星测试引擎调用给定类或方法的自定义扩展。或者,测试用例编写者可以通过编程的方式注册自定义扩展,或者通过服务加载器机制进行自动注册。

  

我们的自定义扩展需要一种识别故事的方法。为此,我们定义了一个名为“故事”的自定义注解类,如下所示:

        进口org.junit.platform.commons.annotation.Testable;      @Testable   公共@ interface故事{…}

JUnit 5中扩展模型的深入理解