Junit核心——测试类(TestCase)、测试集(TestSuite)、测试运行器(TestRunner)
首先,把这三个定义简单的说明一下:
1、测试类(TestCase):一个包含一个或是多个测试的类,在Junit中就是指的是包含那些带有@Test注解的方法的类,同一样也被称作“测试用例”;
2、测试集(TestSuite):测试集是把多个相关测试归入一个组的表达方式,在Junit中,如果我们没有明确的定义一个测试集,那么Juint会自动的提供一个测试集,一个测试集一般将同一个包的测试类归入一组;
3、测试运行器(TestRunner):执行测试集的程序。
定义说完了,还有两个好理解的定义:断言(assert)和测试(Test),加上这两个定义,从断言到测试运行器就是从“原子”到“分子”的过程,“原子”组成“分子”的,“分子”包含若干”原子“。
关于测试类就比较好理解了,这里就不再拿出来说了,具体的说一说测试集与测试运行器吧。
一、测试运行器:
本文开篇已经说了关于测试运行器的概念,比较简单:执行测试集的程序,而在Junit中,我们使用测试运行器的方式也特别的简单,主要的是使用Junit的@RunnWith注解
- import org.junit.runner.RunWith;
- import org.junit.runners.JUnit4;
- @RunWith(value=JUnit4.class)
- public class TestRunner {
- }
在此,我们定义了一个Junit4测试用例的运行器,Junit4包含下面4中测试运行器:
运行器 | 目的 |
org.junit.internal.runners.JUnit38ClassRunner | 为了向后兼容Junit3.8的运行器 |
org.junit.runners.JUnit4 | Junit4的测试运行器 |
org.junit.runners.Parameterized | 可以使用不同参数来运行相同测试集的运行器 |
org.junit.runners.Suite | 包含不同测试的容器 |
其中,JUnit38ClassRunner是用来告知运行器将要运行的的测试应该是在Junit3.8中运行;Suite 我们会在测试集进行介绍,而Parameterized是我们要详细介绍的
Parameterized(参数化)的测试运行器允许我们使用不同的参数多此运行同一个测试,
比如我们在测试一个提供乘法算数的方法时,我们可以为测试用例提供三组数据:4*5(两个正整数)、-4*5(一正一负)、0*5(0与正整数),提供多组数据可以让我们从不同的角度对同一个方法进行测试,
具体的实现如下:
- package org.yezi.junit;
- public class Calcaute {
- public int ride(int a, int b){
- return a * b;
- }
- }
- package org.yezi.junit;
- import static org.junit.Assert.*;
- import java.util.ArrayList;
- import java.util.Collection;
- import java.util.List;
- import org.junit.*;
- import org.junit.runner.RunWith;
- import org.junit.runners.Parameterized;
- import org.junit.runners.Parameterized.Parameters;
- @RunWith(value=Parameterized.class)
- public class TestCalcaute {
- private Calcaute calcaute = null;
- private int expected;
- private int valueOne;
- private int valueTwo;
- @Parameters
- public static Collection<Integer[]> getTestParameters(){
- List<Integer[]> list = new ArrayList<Integer[]>();
- list.add(new Integer[]{20,4,5}); //expected,valueOne,valueTwo
- list.add(new Integer[]{-20,-4,5});
- list.add(new Integer[]{0,0,5});
- return list;
- }
- public TestCalcaute(int expected, int valueOne, int valueTwo){
- this.expected = expected;
- this.valueOne = valueOne;
- this.valueTwo = valueTwo;
- }
- @Before
- public void setUp(){
- calcaute = new Calcaute();
- }
- @Test
- public void testAdd(){
- int result = calcaute.ride(valueOne, valueTwo);
- assertEquals(expected, result);
- }
- }
ok,功能实现了,但是,在此我们要说明几个必须:
1、实现参数化测试运行器,该类必须加上@RunWith(value=Parameterized.class)注解!否则运行Junit报java.lang.Exception: Test class should have exactly one public zero-argument constructor异常
2、必须把测试的期望结果、以及测试参数声明为全局的、私有的!
3、必须创建一个带期望结果、测试参数的构造方法!
4、必须创建一个返回若干个测试参数、期望结果组的静态方法,返回类型为Collection<Integer[]>,并且该方法加以@Parameters( org.junit.runners.Parameterized.Parameters)注解!
Junit核心——测试类(TestCase)、测试集(TestSuite)、测试运行器(TestRunner)的更多相关文章
- Java基础-继承-编写一个Java应用程序,设计一个汽车类Vehicle,包含的属性有车轮个数 wheels和车重weight。小车类Car是Vehicle的子类,其中包含的属性有载人数 loader。卡车类Truck是Car类的子类,其中包含的属性有载重量payload。每个 类都有构造方法和输出相关数据的方法。最后,写一个测试类来测试这些类的功 能。
#29.编写一个Java应用程序,设计一个汽车类Vehicle,包含的属性有车轮个数 wheels和车重weight.小车类Car是Vehicle的子类,其中包含的属性有载人数 loader.卡车类T ...
- 29.编写一个Java应用程序,设计一个汽车类Vehicle,包含的属性有车轮个数 wheels和车重weight。小车类Car是Vehicle的子类,其中包含的属性有载人数 loader。卡车类Truck是Car类的子类,其中包含的属性有载重量payload。每个 类都有构造方法和输出相关数据的方法。最后,写一个测试类来测试这些类的功 能。
//Vehicle类 package d922A; public class Vehicle { private int wheels; private double weight; Vehicle( ...
- (1)定义一个接口CanFly,描述会飞的方法public void fly(); (2)分别定义类飞机和鸟,实现CanFly接口。 (3)定义一个测试类,测试飞机和鸟,在main方法中创建飞机对象和鸟对象, 再定义一个makeFly()方法,其中让会飞的事物飞。并在main方法中调用该方法, 让飞机和鸟起飞。
package b; public interface CanFly { public void fly(); } package b; public class FeiJi implements C ...
- (1)编写一个接口:InterfaceA,只含有一个方法int method(int n); (2)编写一个类:ClassA来实现接口InterfaceA,实现int method(int n)接口方 法时,要求计算1到n的和; (3)编写另一个类:ClassB来实现接口InterfaceA,实现int method(int n)接口 方法时,要求计算n的阶乘(n!); (4)编写测试类E测试
package a; public interface InterfaceA { int method(int n); } package a; public class ClassA impleme ...
- 编写一个Java应用程序,设计一个汽车类Vehicle,包含的属性有车轮个数 wheels和车重weight。小车类Car是Vehicle的子类,其中包含的属性有载人数 loader。卡车类Truck是Car类的子类,其中包含的属性有载重量payload。每个 类都有构造方法和输出相关数据的方法。最后,写一个测试类来测试这些类的功 能。
package car; public class Vehicle { //定义成员变量 private int wheels; private double weight; public int g ...
- JUit——(三)JUnit核心对象(测试、测试类、Suit和Runner)
JUnit的核心对象:测试.测试类.测试集(Suite).测试运行器 1. 测试: @Test注释的.公共的.不带有任何参数.并且返回void类型的方法 2. 测试类: 公共的,包含对应类的测试方法的 ...
- Spring4.2.3+Hibernate4.3.11整合( IntelliJ maven项目)(使用Annotation注解)(Junit测试类)
1. 在IntelliJ中新建maven项目 给出一个建好的示例 2. 在pom.xml中配置依赖 包括: spring-context spring-orm hibernate-core mysql ...
- 15.junit测试类使用及注解
1.junit简介 JUnit是一个Java语言的单元测试框架,可以大大缩短你的测试时间和准确度.多数Java的开发环境都已经集成了JUnit作为单元测试的工具. 2.实现junitDemo示例 2. ...
- python调用HTMLTestRunner+unittest实现一次执行多个测试类,并生成与每个测试类对应的测试报告,具体看代码,附上整个project代码
python自动化框架雏形,根据自己需要封装:ui自动化,接口自动化均可适用,python版本为python3.x,不要问我为什么不用python2.x,附上整个project代码:http://fi ...
随机推荐
- win 10 用户上传头像保存的文件夹路径
win 10 用户上传头像保存的文件夹路径 C:\Users\Administrator(用户名)\AppData\Roaming\Microsoft\Windows\AccountPictures
- VS2013 打开项目时提示This project is incompatible with the current edition Visual Studio.
刚安装完成了Visual Studio 2013后,打开项目时,遇到以下问题 解决方法:在Visual Studio 2013 的菜单中打开“Tools",并打开“Extensions an ...
- Druid数据迁移小计
Druid数据迁移小计 Druid 官方网站上讲了相关的 Dump Segment 和 Insert Segment 相关的功能,但是经过测试这些功能都不好用,报 Guice 的依赖错误,懒得找具体原 ...
- VMware8安装配置Win7、CentOS-7向导
1.宿主电脑配置情况 Windows 8.1 中文版 Intel(R) Core(TM) i5-4210U CPU @ 1.70GHz 2.4GHz RAM: 8G Type: 64 bit 2.软件 ...
- 【java】线程安全的整型类AtomicInteger
一.遇见AtomicInteger 在看项目代码的时候看到这个类,发现其功能很简单,就是一个整型变量的类型,出于好奇看了其类定义. 该类位于java.util.concurrent.atomic下,在 ...
- 【Splay】Codeforces Round #424 (Div. 1, rated, based on VK Cup Finals) B. Cards Sorting
Splay要支持找最左侧的最小值所在的位置.类似线段树一样处理一下,如果左子树最小值等于全局最小值,就查左子树:否则如果当前节点等于全局最小值,就查当前节点:否则查右子树. 为了统计答案,当然还得维护 ...
- 课堂作业-Bag类的实现
课堂作业-Bag类的实现 要求: 代码运行在命令行中,路径要体现学号信息,IDEA中,伪代码要体现个人学号信息 参见Bag的UML图,用Java继承BagInterface实现泛型类Bag,并对方法进 ...
- UVA 12284 Digital Matrix
思路:这个分清楚情况就很好做了. 注意一点当A的转置等于B的时候(对角线除外),记录A的下三角(或上三角)有cnt个的数与B不同,如果cnt>1则 不需要额外的步数就可以了,否则当k==2时结果 ...
- Generator函数(一)
Generator函数是ES6提供的一种异步编程解决方案,语法行为与传统函数完全不同.对于这个函数有多种理解.从语法上来理解,可以将它理解成一个状态机,封装了多个内部状态.内部的不同状态是通过yiel ...
- (Mark)JS中的上下文
执行上下文的代码被分成两个基本的阶段来处理: 进入执行上下文 执行代码 变量对象的修改变化与这两个阶段紧密相关. 注:这2个阶段的处理是一般行为,和上下文的类型无关(也就是说,在全局上下文和函数上下文 ...