【单元测试】Junit 4(二)--eclipse配置Junit+Junit基础注解
1.0 前言
前面我们介绍了白盒测试方法,后面我们来介绍一下Junit 4,使用的是eclipse(用IDEA的小伙伴可以撤了)
1.1 配置Junit 4
1.1.1 安装包
我们需要三个jar包:
- org.junit_4.13.2.v20211018-1956.jar
- org.hamcrest.core_1.3.0.v20180420-1519.jar
- org.hamcrest-library-1.3.jar
org.junit_4.13.2.v20211018-1956.jar和org.hamcrest.core_1.3.0.v20180420-1519.jar这两个jar包是eclipse自带的
然后我们需要下一个org.hamcrest-library-1.3.jar
1.1.2 创建Junit项目
点击 new >> New >> Project
选择Java Project 点击next
输入项目名,选择jre,点击next
选择 Libraries >> Classpath >> Add Extemal JARs
选择之前我们的三个jar包,一般放在eclipsed的plugins目录,org.hamcrest-library-1.3.jar则在自己下载的目录(可以把下载下来的jar包也丢这里),点击Finish
我们新建一个文件夹存放junit代码
新建一个项目
编写Demo.java代码:
public class Demo {public int add (int a, int b) {return a + b;}public int div (int a, int b) {return a / b;}
}
右键项目,new一个,这里没有junit,我们去其他里面找
在java下的junit,选择Test Case,点击next
选择junit4,选择目录到我们刚刚建的junit文件夹,选择Finish
在DemoTest.java中输入代码:
import static org.junit.Assert.*;import org.junit.After;
import org.junit.Before;
import org.junit.Test;public class DemoTest {Demo demo;@Beforepublic void setUp() throws Exception {demo = new Demo();}@Afterpublic void tearDown() throws Exception {demo = null;}@Testpublic void testAdd() {// 实例化一个类Demo demo = new Demo();// 期望值int expetected = 2;// 真实值int trueValue = demo.add(1, 1);// 断言方法assertEquals(expetected, trueValue);}@Testpublic void testDiv() {// 实例化一个类Demo demo = new Demo();// 期望值int expetected = 2;// 真实值int trueValue = demo.div(2, 1);// 断言方法assertEquals(expetected, trueValue);}}
运行
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-M5JlDtKd-1667395645498)(E:\桌面\博客园\image\image-20221102211733409.png)]
1.2 Junit 4 注解
1.2.1 测试用例相关的注解
1.2.1.1 @Before
public void setUp() throws Exception {// 初始化所需的资源
}
在每个测试方法之前执行,用以初始化需要初始化的资源
1.2.1.2 @After
@After
public void tearDown() throws Exception {// 关闭资源
}
在每个测试方法之后执行,用以关闭需要初始化的资源
1.2.1.3 @BeforeClass
@BeforeClass
public static void setup() throws Exception {// 初始化资源
}
在所有方法执行之前执行,一般被用作执行计算代价很大的任务,如打开数据库连接。被@BeforeClass 注解的方法应该是静态的(即 static类型的)。
1.2.1.4 @AfterClass
@AfterClass
public static void tearDown() throws Exception {// 关闭资源
}
在所有方法执行之后执行,一般被用作执行类似关闭数据库连接的任务。被@AfterClass 注解的方法应该是静态的(即 static类型的)。
1.2.1.5 @Test
@Test
public void test01() {// 测试,断言等
}
包含了真正的测试代码,并且会被Junit应用为要测试的方法。
@Test注解有两个可选的参数:
- expected表示此测试方法执行后应该抛出的异常,(值是异常名)
- timeout检测测试方法的执行时间
1.2.1.6 @Ignore
注释掉一个测试方法或者一个类,被注释的方法或类,不会被执行。
注意:JUnite4的执行顺序:@BeforeClass > @Before > @Test1 > @After > @Before > @Test2 > @After … > @AfterClass
1.2.1.7 示例
import static org.junit.Assert.*;import org.junit.After;
import org.junit.Before;
import org.junit.Test;public class DemoTest {@BeforeClasspublic static void setup() throws Exception {// 这里初始化资源(如连接数据库)}@AfterClasspublic static void tearDown() throws Exception {// 关闭资源()}@Beforepublic void setUp() throws Exception {System.out.println("SetUp.....");// 这里初始化我们所需要的资源}@Afterpublic void tearDown() throws Exception {System.out.println("Gone.....");// 这里关闭我们的资源}@Testpublic void test01() {// 测试1}@Ignore@Testpublic void test02() {// 测试2}}
1.2.2 打包测试Suite相关的注解
1.2.2.1 @RunWith(Suite.class)
需要一个特殊的Runner, 因此需要向@RunWith注解传递一个参数Suite.calss。
1.2.2.2 @Suite.SuiteClasses(…{xx.class, xx.class, …})
用来表明这个类是一个打包测试类,把需要打包的类作为参数传递给该注解即可。
1.2.2.3 示例
有了这两个注解之后,就已经完整的表达了所有的含义,因此下面的类无关紧要,随便起个类名,内容为空
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
import org.junit.runners.Suite.SuiteClasses;public class DemoTest {@RunWith(Suite.class)@SuiteClasses({Demo01.class, Demo02.class, Demo03.class})public class AllTests {}
}
1.2.3 参数化测试相关的注解
1.2.3.1 @RunWith(Parameterized.class)
首先要为这种测试专门生成一个新的类,而不能与其他测试共用同一个类。
这里不使用默认的Runner了,使用带有参数化功能的Runner。
@RunWith(Parameterized.class)这条语句就是为这个类指定了ParameterizedRunner。
这个需要和我们后面的**@Parameters**组合使用
1.2.3.2 @Parameters
放在方法上。
定义一个待测试的类,并且定义两个变量,一个用于存放参数,一个用于存放期待的结果。
定义测试数据的结合,就是下方的prepareData()方法,该方法可以任意命名,但是必须使用@Parameters标注进行修饰。
这里需要注意:其中的数据是一个二维数组,数据两两一组,每组中的这两个数据,一个是参数,一个是预期的结果。比如第一组{2,4}中:2是参数,4是预期结果。这两数据顺序无所谓。
然后,是构造函数,其功能就是对先前定义的两个参数进行初始化。这里要注意参数的顺序,要和上面的数据集合的顺序保持一致。(比如都是先参数后结果)
那么这里我们还是看下面的例子吧
1.2.3.3 示例
import static org.junit.Assert.assertEquals;import java.util.Arrays;import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;@RunWith(Parameterized.class)
public class FibonacciTest {@Parameters(name = "{index}: fib({0})={1}")public static Iterable<Object[]> data() {return Arrays.asList(new Object[][] { { 0, 0 }, { 1, 1 }, { 2, 1 }, { 3, 2 }, { 4, 3 }, { 5, 5 }, { 6, 8 }});}private int input;private int expected;public FibonacciTest(int input, int expected) {this.input = input;this.expected = expected;}@Testpublic void test() {assertEquals(expected, Fibonacci.compute(input));}
}
1.2.4 控制用例执行顺序相关的注解
1.2.4.1 @FixMethodOrder
控制测试方法的执行顺序的。
该注解的参数是org.junit.runners.MethodSorters对象。
枚举类org.junit.runners.MethodSorters中定义三种顺序类型:
MethodSorters.JVM:按照JVM得到的方法顺序,即代码中定义的方法顺序。
MethodSorters.DEFAULT:默认的顺序,以确定但不可预期的顺序执行。
MethodSorters.NAME_ASCENDING:按方法名字母顺序执行。
1.2.5 自定义规则Rule相关的注解
1.2.5.1 @Rule和@ClassRule
什么是Rule实现
Rule是一组实现了TestRule接口的共享类,提供了验证,监视TestCase和外部资源管理等能力。
即,提供了测试用例执行过程中一些通用功能的共享能力,使不必重复编写一些功能类似的代码。
JUnit4中包含两个注解:@Rule和@ClassRule
用于修饰Field或返回Rule的Method。
两者作用域不同:
- @Rule的作用域是测试方法。
- @ClassRule则是测试Class。
1.2.5.2 JUnit提供了以下几个Rule实现,必要时也可以自己实现Rule
Verifier:验证测试执行结果的正确性。
ErrorCollector:收集测试方法中出现的错误信息,测试不会中断,如果有错误发生,测试结束后会标记失败。
ExpectedException:提供灵活的异常验证功能。
Timeout:用于测试超时的Rule。
ExternalResource:外部资源管理。
TemporaryFolder:在JUnit的测试执行前后,创建和删除新的临时目录。
TestWatcher:监视测试方法生命周期的各个阶段。
TestName:在测试方法执行过程中提供获取测试名字的能力。
【单元测试】Junit 4(二)--eclipse配置Junit+Junit基础注解相关推荐
- Eclipse配置Tomcat超级基础教程
写JAVA期末大作业需要配置Tomcat,写博客记录一下喽.新手小白第一篇博客,大家不喜勿喷鸭.共勉一起进步! 首先介绍一下Tomcat Tomcat下载教程 Eclipse配置Tomcat步骤: T ...
- Tomcat快速入门(Tomcat安装 把一个项目发布到tomcat中 Eclipse配置Tomcat idea配置tomcat)
文章目录 服务器的概念 服务器 Web服务器软件:接收客户端发送的请求和响应客户端请求. 常见的Web服务器软件 Tomcat安装 win下启动乱码问题解决 Tomcat目录介绍 如何把一个项目发布到 ...
- Maven项目在eclipse中使用junit进行单元测试时报错:ClassNotFoundException
Maven项目在eclipse中使用junit进行单元测试时Coonsole出现以下错误: Class not found boco.ips.data.ice.orm.mapper.TestDemoM ...
- eclipse中测试java_在Eclipse中使用JUnit进行单元测试
如何编写测试代码肯定是开发人员最头疼的.JUnit是一个非常强大的单元测试包,可以对一个/多个类的单个/多个方法测试,还可以将不同的TestCase组合成TestSuit,使测试任务自动化. 本文简单 ...
- java知识积累——单元测试和JUnit(二)
首先来复习一下几个重要知识点,然后接着进行一些介绍.在上一篇文章中,我曾经贴过下面这张图片: 在Which method stubs would you like to create?这里,现在结合4 ...
- Eclipse中使用Junit编写测试用例
Eclipse自带Junit插件,不用安装就能在项目中编写测试用例,非常方便. 在项目中添加Junit库 在编写测试用例之前,需要先引入Junit.对项目根目录右键,选择Properties,Java ...
- junit 5测试异常处理_使用JUnit 5测试异常
junit 5测试异常处理 JUnit 5带来了令人敬畏的改进,并且与以前的版本有很大不同. JUnit 5在运行时需要Java 8,因此Lambda表达式可以在测试中使用,尤其是在断言中. 这些断言 ...
- JAVA Junit error java.lang.SecurityException: class junit.framework.JUnit4TestCaseFacade
运行junit4时报错: java.lang.SecurityException: class "junit.framework.JUnit4TestCaseFacade"'s s ...
- JAVA小萌新(二)—— eclipse配置 jdk 和 tomcat
1.本文章适用于eclipse配置完成的条件下(jdk配置完成)对eclipse配置Tomcat F:话不多说,开始操作 ①打开eclipse(如果没有配置JDK的话,Eclipse也不会正常打开的) ...
- Windows平台Eclipse配置Maven
Windows平台Eclipse配置Maven 在Eclipse中配置Maven,安装Maven插件,两个:m2eclipse和m2e-extras(后者包含跟svn结合的SCM handler). ...
最新文章
- Win7下删除FOXMAIL右键发送到选项
- C++_向函数传递对象
- ASP.NET Page执行顺序如:OnPreInit()、OnInit()
- racle的STRUCT和VARRAY的读写方法
- centos升级之内核kernel
- 12-1 12 防盗链 访问控制 php解析 代理
- c# params 工作原理。
- linux 网卡驱动 优化,Linux多核环境网卡驱动优化研究①.PDF
- CentOS系统根目录下各个目录存放的内容
- 一个超级简单的HTML模板框架源代码以及使用示例
- JAVA DES加密解密代码范例
- 适应浏览器自带断点下载
- 计算机基础中英文打字,中英文打字
- [词根词缀]dic/dign/divid/doc/dom由来及词源D故事
- 计算机视觉:视频分解图片和图片合成视频
- PS-制作燃烧的字体
- Redis订阅与发布原理
- 你知道为什么zip始终不兼容rar吗?
- Studio 3T 的Query Builder使用
- 用于CTF(MISC)的kali虚拟机更改过程记录
热门文章
- Java int 最大值 最小值
- 计算机毕业设计-基于ssm+vue的化妆品商城管理系统(前后端分离)java代码
- ubuntu install ai k8s kubeadm
- “轻医美”趋势确认,互联网医美该怎么走?
- loj 572 Misaka Network 与求和 —— min_25筛
- 配置用友UAP平台(NC65)
- 【java】算法题:一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级台阶总共有多少种跳法?列举所有跳法
- 【随机过程】泊松分布,计算到达时间S1,S2,S3的联合分布
- 防抖(debounce)、节流(throttle)以及前端锁(mutex)
- 力扣-55.跳跃游戏