几个Demo让你秒懂Junit5

几个Demo让你秒懂Junit5

Junit5是目前最新版本的的junit单测框架,junit团队在2017年9月10日发布第一个版本。junit5是基于java8及以上版本,支持lambda函数以及其他新的特性。Junit5主要由三部分构成:JUnit Platform + JUnit Jupiter + JUnit Vintage。JUnit Platform用来运行test case的基础平台,同时也开放了一些api用于扩展;JUnit Jupiter是junit5的核心,所有test case的编写都是基于该模块,也支持自定义扩展;JUnit Vintage是用于兼容老版本junit的test case的,可以让老版本的case运行在junit5框架上。

下面先简单介绍下Demo中会用到的通用的特性:

一、如何运行Test Case

1、基于IDE的运行:截至到目前只有IntelliJ IDEA和Eclipse 4.7(Oxygen)支持junit5,只需要添加junit5相应的依赖就可以直接运行。

2、在测试类上利用注解@RunWith(JUnitPlatform.class),可以基于junit4框架运行junit5的case,需要添加依赖junit-4.12、junit-platform-runner、junit-jupiter-engine。这种方式可以在大部分IDE上使用,用于在开发调式test case时使用很是方便,本文中所有demo的开发都是基于这种运行模式。

3、基于构建工具(maven或者gradle)的运行模式,这种方式可以批量且有选择性的执行case,适合运用在CI测试中,需要在构建文件中配置下插件和依赖。

4、console launcher:基于控制台的执行方式,需要下载可执行jar包junit-platform-console-standalone-1.0.2.jar,然后再命令行中执行:

java -jar junit-platform-console-standalone-1.0.2.jar <option>,  这种方式在二次开发分布式运行比较方便,这里不做过多介绍。

本文中的构建配置都是基于maven的,后边demo中会提供详细的配置,客官们莫急。

二、常用的注解

1、@Tag:相当于junit4中的Categories,用于分组,可用于类或方法上,每个类或方法可有多个Tag;用maven运行测试时,可以基于Tag选择性的执行。

2、@TestInstance(Lifecycle.PER_CLASS):用来指定某个测试类的case执行的生命周期,默认的生命周期模式为per_method,即每次执行测试方法都会创建一个单独的测试类实例。per_classs模式是只创建一个测试类实例。还可以通过properties或者pom.xml来配置,demo中都有列出。

3、@ExtendWith:可用于测试类或方法上,用来加载自定义的扩展类,给测试类或方法添加额外的功能,比如输出执行时间

4、@DisplayName:为case定义一个输出时的名称

5、@Disabled:被注解的类或者方法不会被执行,string参数可省略,相当于junit4中的@Ignore,一般用于某些废弃的case上,还可以保留版本信息

三、Little Tips

1、所有的用例类或者方法都无需用public修饰

2、所有被@Test, @TestTemplate, @RepeatedTest, @BeforeAll, @AfterAll, @BeforeEach, or @AfterEach注解的方法,不能有返回值即必须用void修饰

3、unit5中的断言可能不是特别全面,可以依靠第三方库的断言功能来弥补,官方推荐的第三方库: AssertJ, Hamcrest, Truth
直接导入对应的断言方法使用即可。

下面开始给出一些case的demo:

一、标准版case

二、可重复执行case

三、参数化case

四、Mock测试case

五、实现接口的case

以上是junit5中比较常用case类型,还有Test Template和Dynamic Tests比较高级和抽象的case类型这里不做介绍,还有开发扩展类的api使用方法及其他详情请参考Junit5官方文档

完整的代码demo,可以从Github上下载!

码字辛苦,转载请注明出处!

 

Comments are closed.