JUnit入门

一、简介

与以前版本的JUnit不同,JUnit 5由来自三个不同子项目的几个不同模块组成。

JUnit 5 = JUnit Platform + JUnit Jupiter + JUnit Vintage
  • JUnit Platform是基于JVM的运行测试的基础框架在,它定义了开发运行在这个测试框架上的TestEngine API。此外该平台提供了一个控制台启动器,可以从命令行启动平台,可以为Gradle和 Maven构建插件,同时提供基于JUnit 4的Runner。
  • JUnit Jupiter是在JUnit 5中编写测试和扩展的新编程模型和扩展模型的组合.Jupiter子项目提供了一个TestEngine在平台上运行基于Jupiter的测试。
  • JUnit Vintage提供了一个TestEngine在平台上运行基于JUnit 3和JUnit 4的测试。

需要java8或更高版本的jdk

二、环境

2.1 Eclipse

主流IDE都支持(IntelliJ IDEA,Eclipse, NetBeans和Visual Studio Code),可用(Gradle,Maven和 Ant)等工具轻松支持JUnit平台。

由于我使用都是Eclipse IDE for Java Developers。Version: 2018-12 (4.10.0)。所以没法全都讲。

Eclipse自带了。如图所示
在这里插入图片描述

2.2 Maven

如果用Maven,一个完整的pom.xml如下

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
		 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>

	<groupId>com.example</groupId>
	<artifactId>junit5-jupiter-starter-maven</artifactId>
	<version>1.0-SNAPSHOT</version>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<maven.compiler.source>1.8</maven.compiler.source>
		<maven.compiler.target>${maven.compiler.source}</maven.compiler.target>
		<junit.jupiter.version>5.5.2</junit.jupiter.version>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.junit.jupiter</groupId>
			<artifactId>junit-jupiter</artifactId>
			<version>${junit.jupiter.version}</version>
			<scope>test</scope>
		</dependency>
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>3.8.1</version>
			</plugin>
			<plugin>
				<artifactId>maven-surefire-plugin</artifactId>
				<version>2.22.2</version>
			</plugin>
		</plugins>
	</build>

</project>

三、Hello JUnit

本文代码详见github仓库:https://github.com/landbroken/JavaLearning/tree/master/com.lyl.JUnit

待测试类

package com.lyl.JUnit;
 
public class Calculate {
	public int add(int a,int b){
		return a+b;
	}
	
	public int minus(int a , int b){
		return a-b;
	}
}

测试类

package com.lyl.JUnit;

import static org.junit.jupiter.api.Assertions.assertEquals;
import org.junit.jupiter.api.Test;

/**
 * 第一个测试用例
 * @author lyl
 *
 */
public class FirstTests {
	private final Calculate cal = new Calculate();
	//@Test:表示方法是一种测试方法。
	//与JUnit 4的@Test注释不同,此注释不会声明任何属性,因为JUnit Jupiter中的测试扩展基于它们自己的专用注释进行操作。
	//除非被覆盖,否则这些方法是继承的。
	@Test
	public void testAdd() {
		int result = cal.add(3, 3);
		assertEquals(6,result);
	}
	
	@Test
	public void testMinus() {
		int result = cal.minus(5, 2);
		assertEquals(3,result);
	}
}

运行方法:右键-Run As/Coverage As-JUnit Test
运行结果:
在这里插入图片描述
如果出现NoClassDefFoundError问题,可能是之前包没添加对。重新添加一下,或见参考文献[4]。

四、编写测试

4.1 注释

@Test

表示方法是一种测试方法。与JUnit 4的@Test注释不同,此注释不会声明任何属性,因为JUnit Jupiter中的测试扩展基于它们自己的专用注释进行操作。除非被覆盖,否则这些方法是继承的。

@ParameterizedTest

表示方法是参数化测试。除非被覆盖,否则这些方法是继承的。

@RepeatedTest

表示方法是重复测试的测试模板。除非被覆盖,否则这些方法是继承的。

@TestFactory

表示方法是动态测试的测试工厂。除非被覆盖,否则这些方法是继承的。

@TestTemplate

表示方法是设计为多次调用的测试用例的模板,具体取决于注册提供程序返回的调用上下文的数量。除非被覆盖,否则这些方法是继承的。

@TestMethodOrder

用于配置带注释的测试类的测试方法执行顺序 ; 类似于JUnit 4的@FixMethodOrder。这样的注释是继承的。

@TestInstance

用于为带注释的测试类配置测试实例生命周期。这样的注释是继承的。

@DisplayName

声明测试类或测试方法的自定义显示名称。这样的注释不是继承的。

@DisplayNameGeneration

声明测试类的自定义显示名称生成器。这样的注释是继承的。

@BeforeEach

表示该注释的方法应该被执行之前 的每个 @Test,@RepeatedTest,@ParameterizedTest,或@TestFactory方法在当前类; 类似于JUnit 4的@Before。除非被覆盖,否则这些方法是继承的。

@AfterEach

表示该注释的方法应该被执行之后 每个 @Test,@RepeatedTest,@ParameterizedTest,或@TestFactory方法在当前类; 类似于JUnit 4的@After。除非被覆盖,否则这些方法是继承的。

@BeforeAll

表示该注释的方法应该被执行之前 所有 @Test,@RepeatedTest,@ParameterizedTest,和@TestFactory方法在当前类; 类似于JUnit 4的@BeforeClass。这些方法是继承的(除非它们被隐藏或覆盖)并且必须是static(除非使用“每类” 测试实例生命周期)。

@AfterAll

表示该注释的方法应该被执行之后 的所有 @Test,@RepeatedTest,@ParameterizedTest,和@TestFactory方法在当前类; 类似于JUnit 4的@AfterClass。这些方法是继承的(除非它们被隐藏或覆盖)并且必须是static(除非使用“每类” 测试实例生命周期)。

@Nested

表示带注释的类是非静态嵌套测试类。除非使用“每类” 测试实例生命周期,否则不能在测试类中直接使用@BeforeAll和@AfterAll方法。这样的注释不是继承的。@Nested

@Tag

用于在类或方法级别声明用于过滤测试的标记 ; 类似于TestNG中的测试组或JUnit 4中的类别。此类注释在类级别继承,但不在方法级别继承。

@Disabled

用于禁用测试类或测试方法; 类似于JUnit 4的@Ignore。这样的注释不是继承的。

@ExtendWith

用于以声明方式注册扩展。这样的注释是继承的。

@RegisterExtension

用于通过字段以编程方式注册扩展。除非它们被遮蔽,否则这些字段是继承的。

@TempDir

用于通过生命周期方法或测试方法中的字段注入或参数注入来提供临时目录 ; 位于org.junit.jupiter.api.io包装中。

参考资料

  1. JUnit 5 User Guide
  2. JUnit 5 系列:基础入门
  3. 单元测试之JUnit5入门
  4. 关于怎么解决java.lang.NoClassDefFoundError错误
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值