Jason-Matrix

1.总览

这个文档的目的是为程序员提供综合参考文献,当他们写测试,扩展作者,引擎作者也包括创建工具和IDE公司.

1.1. 什么是 JUnit 5?

不像之前版本的JUnit, JUnit  5 是由几个不同的模块,他们来自三个不同的子项目.

JUnit 5 = JUnit Platform + JUnit Jupiter + JUnit Vintage

JUnit Platform 充当位于JVM上的启动测试框架的基础. 它也定义了运行在平台上的测试引擎API-目的是开发测试框架. 此外,这个平台提供了控制台启动器,它从命令行启动了平台,和和为了在JUnit 4环境中运行任何测试引擎启动了基于JUnit 4 运行器. 第一类支持JUnit平台也存在与流行的IDEs和构建工具. 

JUnit Jupiter  是新的编程设计模型和为了在JUnit 5写测试和扩展的扩展模型的组合. 这个Jupiter 子项目提供一个为了在平台上运行基于Jupiter测试的测试引擎.

JUnit Vintage 提供一个测试引擎,用于在平台上运行基于JUnit 3和JUnit 4的测试.

1.2. 支持的Java版本

Java 8或更高.

1.3. 略

1.4.开始

1.4.1. 下载JUnit Artifacts

1.4.2 JUnit 5 特点

要想找出什么特点在JUnit 5中可选和怎么使用他们,阅读User Guide相关章节.

  • 在JUnit Jupiter中写测试
  • 从JUnit 4移植到JUnit Jupiter
  • 运行测试
  • JUnit Jupiter扩展模型
  • 高级课题

           Junit 平台启动API

           JUnit 平台测试配套设备

1.4.3 项目实例

要看完整的,可工作的项目实例, 而且能拷贝和试验, junit5-samples 库是一个开始的好地方.junit5-samples 库存储了一堆基于JUnit Jupiter, JUnit Vintage, 和其他测试框架项目示例. 你会在项目示例中发现合适的构建脚本

2.编写测试

下列例子提供了在JUnit Jupiter写测试的最小要求的一瞥. 这个章节随后的部分会提供更深的细节在所有可选的特点上.

import static org.junit.jupiter.api.Assertions.assertEquals;
import example.util.Calculator;//该段代码不能运行,因为该行报错,解决方法可能是写Calculater类
import org.junit.jupiter.api.Test;
class MyFirstJUnitJupiterTests {
  private final Calculator calculator = new Calculator();
  @Test
  void addition() {
  assertEquals(2, calculator.add(1, 1));
  }
}

2.1.注解

JUnit Jupiter支持下列注解,功能是配置测试和扩展框架.

除非另有声明,所以核心注解都位于 org.junit.jupiter.api 包在junit-jupiter-api模块.

注解 解释
@Test 表示方法是测试方法. 不像JUnit 4的@Test声明, 这个声明不表明任何属性, 由于JUnit Jupiter中的测试扩展基于他们自己的专用注解上操作. 这样的方法是继承的除非他们被重写
@ParameterizedTest 表示方法是一个参数化测试.这样的方法是继承的除非他们被重写
@RepeatedTest 表示方法是一个重复测试的测试模板.这样的方法是继承的除非他们被重写
@TestFactory  表示方法是一个为了动态测试的测试工厂.这样的方法是继承的除非他们被重写
@TestTemplate 表示方法是一个测试模板,设计被多次调用,依据注册供应商返回的调用上下文的数目.这样的方法是继承的除非他们被重写
@TestMethodOrder  用来给注解过的测试类配置测试方法扩展命令.这样的方法是继承的; 与JUnit 4的@FixMethodOrder类似.这样的方法是继承的.
@TestInstance 用来给注解过的测试类配置测试实例生命周期
@DisplayName  给测试类或方法表明一个惯用显示名.这样的方法是不能继承
@DisplayNameGenera
tion 
给测试类表明一个惯用显示名发生器.这样的方法是继承
@BeforeEach  表示被注解的方法应该执行在当前类每个@Test,
@RepeatedTest, @ParameterizedTest, or @TestFactory方法之前; 与JUnit 4的@Before相似.这样的方法是继承的除非他们被重写.
@AfterEach 表示被注解的方法应该执行在当前类每个@Test,
@RepeatedTest, @ParameterizedTest, or @TestFactory方法之后; 与JUnit 4的@After相似.这样的方法是继承的除非他们被重写.
@BeforeAll 表示被注解的方法应该执行在当前类所有@Test,
@RepeatedTest, @ParameterizedTest, or @TestFactory方法之前; 与JUnit 4的@BeforeClass相似.这样的方法是继承的(除非他们被重写),并且必须是静态的(除非"每一类"测试实例生命周期被使用)
@AfterAll 表示被注解的方法应该执行在当前类所有@Test,
@RepeatedTest, @ParameterizedTest, or @TestFactory方法之后; 与JUnit 4的@AfterClass相似.这样的方法是继承的(除非他们被重写),并且必须是静态的(除非"每一类"测试实例生命周期被使用)
@Nested 表示被注解的方法是一个非静态嵌套测试类@BeforeAll@AfterAll方法不能被直接用在@Nested测试类除非"每一类"测试实例生命周期被使用.这个注解不能继承.
@Tag  用来表明筛选测试标签,在类或方法层面;与JUnit 4 TestNG或Categories的测试组相似.这个注解能在类中继承,不能在方法中继承
@Disabled 用来禁用测试类或测试方法;同JUnit 4的@Ignore. 这个注解不能继承.
@Timeout 

使测试,测试工厂,测试模板,或生命周期方法失败

当他们执行时间超出给定的范围.这样的方法是继承

@ExtendWith  通过声明的方法来显示扩展.这样的方法是继承
@RegisterExtension 通过编程方式显示扩展凭借场地.这样的方法是继承的除非他们被跟踪.
@TempDir  凭借场地注入或范围注入支持临时目录在生命周期方法或测试方法;位于org.junit.jupiter.api.io

2.1.1. 元注解和组合注解

JUnit Jupiter注解能被当作元注解使用. 这意味着你能定义会自动继承元注解的含义的自己的组合注解.

例如你能创造一个如下的叫@Fast惯用组合注解, 而不是复制粘贴@Tag("fast")在你全篇的代码上. 然后@Fast能被用作@Tag("fast")的随时调用的替代物.

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.junit.jupiter.api.Tag;
@Target({ ElementType.TYPE, ElementType.METHOD })
@Retention(RetentionPolicy.RUNTIME)
@Tag("fast")
public @interface Fast {
}

如下的@Test方法证实了@Fast注解的使用.

@Fast
@Test
void myFastTest() {
  // ...
}

你能更进一步的介绍常用的@FastTest注解,他能被用作@Tag("fast")@Test随时调用的替代物.

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.junit.jupiter.api.Tag;
import org.junit.jupiter.api.Test;
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Tag("fast")
@Test
public @interface FastTest {
}

 

JUnit自动识别如下部分作为被标为"fast"@Test方法

@FastTest
void myFastTest() {
  // ...
}

 

分类:

技术点:

相关文章: