【单元测试】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;
@Before
public void setUp() throws Exception {
demo = new Demo();
}
@After
public void tearDown() throws Exception {
demo = null;
}
@Test
public void testAdd() {
// 实例化一个类
Demo demo = new Demo();
// 期望值
int expetected = 2;
// 真实值
int trueValue = demo.add(1, 1);
// 断言方法
assertEquals(expetected, trueValue);
}
@Test
public void testDiv() {
// 实例化一个类
Demo demo = new Demo();
// 期望值
int expetected = 2;
// 真实值
int trueValue = demo.div(2, 1);
// 断言方法
assertEquals(expetected, trueValue);
}
}
运行
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 {
@BeforeClass
public static void setup() throws Exception {
// 这里初始化资源(如连接数据库)
}
@AfterClass
public static void tearDown() throws Exception {
// 关闭资源()
}
@Before
public void setUp() throws Exception {
System.out.println("SetUp.....");
// 这里初始化我们所需要的资源
}
@After
public void tearDown() throws Exception {
System.out.println("Gone.....");
// 这里关闭我们的资源
}
@Test
public void test01() {
// 测试1
}
@Ignore
@Test
public 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;
}
@Test
public 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基础注解的更多相关文章
- 【Java】eclipse中的JUnit单元测试
eclipse中的JUnit单元测试 步骤: 选中当前工程 - 右键选择:build path - add libraries - JUnit 4 - 下一步 创建Java类,进行单元测试. 此时的J ...
- java知识积累——单元测试和JUnit(二)
首先来复习一下几个重要知识点,然后接着进行一些介绍.在上一篇文章中,我曾经贴过下面这张图片: 在Which method stubs would you like to create?这里,现在结合4 ...
- 单元测试JUnit 4(二)——keeps the bar green to keeps the code clean
1.Failure和Error Failure是指测试失败 Error是指测试程序本身出错 (int a=10/0) 2.JUnit常用注解 2.1 @RunWith: 可以更改测试运行器(继承o ...
- Android studio及eclipse中的junit单元測试
转载请标明出处:http://blog.csdn.net/nmyangmo/article/details/51179106 前一段时间有人问我单元測试的相关内容,我稍作总结做日志例如以下: 由于我接 ...
- Eclipse中使用Junit编写测试用例
Eclipse自带Junit插件,不用安装就能在项目中编写测试用例,非常方便. 在项目中添加Junit库 在编写测试用例之前,需要先引入Junit.对项目根目录右键,选择Properties,Java ...
- <p>在静态类junit.framework.Assert或者静态类org.junit.Assert中存在下面几个方法</p>
在静态类junit.framework.Assert或者静态类org.junit.Assert中存在下面几个方法 1.assertEquals()方法,用来查看对象中存的值是否是期待的值,与字符串比較 ...
- 单元测试系列之二:Mock工具Jmockit实战
更多原创测试技术文章同步更新到微信公众号 :三国测,敬请扫码关注个人的微信号,感谢! 原文链接:http://www.cnblogs.com/zishi/p/6760272.html Mock工具Jm ...
- 类型:Java;问题:eclipse配置maven;结果:eclipse配置maven
eclipse配置maven 下面跟大家分享的是eclipse配置maven的方法. 方法/步骤 安装maven之前,要先安装jdk及配置JAVA_HOME环境变量.JDK1.4以上. 下载maven ...
- 用IntelliJ IDEA 开发Spring+SpringMVC+Mybatis框架 分步搭建二:配置MyBatis 并测试(2 配置spring-dao和测试)
用IntelliJ IDEA 开发Spring+SpringMVC+Mybatis框架 分步搭建二:配置MyBatis 并测试(1 搭建目录环境和依赖) 四:在\resources\spring 下面 ...
- 用IntelliJ IDEA 开发Spring+SpringMVC+Mybatis框架 分步搭建二:配置MyBatis 并测试(1 构建目录环境和依赖)
引言:在用IntelliJ IDEA 开发Spring+SpringMVC+Mybatis框架 分步搭建一 的基础上 继续进行项目搭建 该部分的主要目的是测通MyBatis 及Spring-dao ...
随机推荐
- 项目一共30个模块,你叫我maven版本一个个手动改?
大家好呀,我是铂赛东,一个乱入公众号博主的开源作者.今天分享一个maven小技巧,希望帮助到大家. 之前有个群友私聊问我,如何快速统一去更改项目中所有的maven版本号,他说之前都是手动一个个去修改, ...
- RabbitMQ 入门系列:2、基础含义理解:链接、通道、队列、交换机
系列目录 RabbitMQ 入门系列:1.MQ的应用场景的选择与RabbitMQ安装. RabbitMQ 入门系列:2.基础含义:链接.通道.队列.交换机. RabbitMQ 入门系列:3.基础含义: ...
- Sum (欧拉定理)
题面 提示:无限输入 题解 一看这题的数据 ............................... 这也太大了,必须边输入边取模才行, 但是式子很复杂,所以必须推出一些结论. 因为Xk是有顺序 ...
- [CISCN2019 华北赛区 Day1 Web2]ikun-1|python反序列化
考点:JWT身份伪造.python pickle反序列化.逻辑漏洞 1.打开之后首页界面直接看到了提示信息,信息如下: 2.那就随便注册一个账号进行登录,然后购买lv6,但是未发现lv6,那就查看下一 ...
- 在Apache Cassandra数据库软件中报告高严重性RCE安全漏洞
研究人员披露了ApacheCassandra一个现已修补的高严重性安全漏洞的细节,如果这个漏洞得不到解决,可能会被滥用来获取受影响安装的远程代码执行(RCE). DevOps公司JFrog的安全研究员 ...
- 面试突击80:说一下 Spring 中 Bean 的生命周期?
Java 中的公共类称之为 Bean 或 Java Bean,而 Spring 中的 Bean 指的是将对象的生命周期,交个 Spring IoC 容器来管理的对象.所以 Spring 中的 Bean ...
- 使用Steamwork.Net 接入Steam一点心得
1. 前言 这是我在开发过程中使用的一点总结,目前使用的东西包含基础登录功能,存档功能,成就系统,以及DLC安装功能.Steamwork不仅仅有这些功能还有游戏内交易,排行榜,数据传输等功能,这些功 ...
- 《Java基础——选择语句》
Java基础--选择语句 1. if语句; 规则: 1. 首先计算表达式的值. 2. 若表达式为真,则执行对应语句,为假则不执行. 格式一: if(表达式) 语句;//多个语句可用{} ...
- ProxySQL 配置MySQL节点
转载自:https://www.jianshu.com/p/ca1b78b5d615 可以在mysql_servers表和mysql_replication_hostgroups表(可选)中配置后端的 ...
- ProxySQL SSL 配置
后端 SSH 连接配置 从版本 v1.2.0e 开始,ProxySQL 支持对后端使用 SSL 连接. 重要提示: 仅支持 v1.x 中的后端 SSL.在 v2.x 之前的版本中,客户端是无法使用 S ...