JUnit是一个Java单元测试框架,用于编写和运行可重复的测试,于1997年由编程大师Kent Beck和 Erich Gamma开发。最新版本为5.x版本,为JDK 8以及更高的版本上提供更好的支持,例如Lambda、重复测试、参数化测试等。
JUnit5由以下几个模块组成:
- JUnit Jupiter:包含JUnit 5新的编程模型和扩展模型,主要用于编写测试代码和扩展代码。
- JUnit Vintage:用于在JUnit 5中兼容运行JUnit3.x和JUnit4.x的测试用例。
- JUnit Platform:是在JVM上启动测试框架的基础服务,提供命令行、IDE和构建工具等方式执行测试的支持。JUnit测试引擎的底层实现。
要使用JUnit,需要进行导包。对于Eclipse,直接导入相应jar包即可。对于Maven项目,需要添加相应依赖:
<!-- 核心功能的依赖 -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.5.2</version>
<scope>test</scope>
</dependency>
<!-- 参数化测试功能的依赖 -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-params</artifactId>
<version>5.5.2</version>
<scope>test</scope>
</dependency>
JUnit的使用方法:在方法之前插入注解。注解包括:
@DisplayName(“测试名”) | 标注测试类名和测试方法名 | 任何 |
---|---|---|
@Test | 标注测试方法 | 无参无返回值的方法 |
@BeforeAll | 所有测试方法开始之前,执行一次 | 静态方法 |
@AfterAll | 所有测试方法结束之后,执行一次 | 静态方法 |
@BeforeEach | 每一个测试方法执行之前,执行一次 | 非静态方法 |
@AfterEach | 每一个测试方法执行之后,执行一次 | 非静态方法 |
@Disable | 忽略这个测试方法 | 任何 |
@RepeatedTest(value, name) | 标注重复测试方法 | 任何 |
@ParameterizedTest | 标注参数化测试方法 | 具有参数的方法 |
@ValueSource(valueType = value) | 为参数化测试提供参数 | 具有参数的方法 |
- 使用了@RepeatedTest就不能使用@Test注解。
- @RepeatedTest注解内可以使用以下几个变量:
- currentRepetition,当前次数
- totalRepetitions,总次数
- displayName,测试方法名
- 使用@ValueSource配合@ParameterizedTest注解,可以表示当前测试方法,需要进行传参测试。 ```java @DisplayName(“测试2”) @RepeatedTest(value = 3, name = “{displayName} 第 {currentRepetition} 次”) // @RepeatedTest(3) 可以省略参数名,表示重复测试3次 void test2() { System.out.println(“ 测试2执行”); }
@ParameterizedTest @ValueSource(strings = {“tom”,”mary”,”poly”}) // 表示测试3次,依次传入不同的参数 void test3(String name) { System.out.println(“hello!”+name); } ```