首先,把这三个定义简单的说明一下:

1、测试类(TestCase):一个包含一个或是多个测试的类,在Junit中就是指的是包含那些带有@Test注解的方法的类,同一样也被称作“测试用例”;

2、测试集(TestSuite):测试集是把多个相关测试归入一个组的表达方式,在Junit中,如果我们没有明确的定义一个测试集,那么Juint会自动的提供一个测试集,一个测试集一般将同一个包的测试类归入一组;

3、测试运行器(TestRunner):执行测试集的程序。

定义说完了,还有两个好理解的定义:断言(assert)和测试(Test),加上这两个定义,从断言到测试运行器就是从“原子”到“分子”的过程,“原子”组成“分子”的,“分子”包含若干”原子“。

关于测试类就比较好理解了,这里就不再拿出来说了,具体的说一说测试集与测试运行器吧。

一、测试运行器:

本文开篇已经说了关于测试运行器的概念,比较简单:执行测试集的程序,而在Junit中,我们使用测试运行器的方式也特别的简单,主要的是使用Junit的@RunnWith注解

  1. import org.junit.runner.RunWith;
  2. import org.junit.runners.JUnit4;
  3. @RunWith(value=JUnit4.class)
  4. public class TestRunner {
  5. }

在此,我们定义了一个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与正整数),提供多组数据可以让我们从不同的角度对同一个方法进行测试,

具体的实现如下:

  1. package org.yezi.junit;
  2. public class Calcaute {
  3. public int ride(int a, int b){
  4. return a * b;
  5. }
  6. }
  1. package org.yezi.junit;
  2. import static org.junit.Assert.*;
  3. import java.util.ArrayList;
  4. import java.util.Collection;
  5. import java.util.List;
  6. import org.junit.*;
  7. import org.junit.runner.RunWith;
  8. import org.junit.runners.Parameterized;
  9. import org.junit.runners.Parameterized.Parameters;
  10. @RunWith(value=Parameterized.class)
  11. public class TestCalcaute {
  12. private Calcaute calcaute = null;
  13. private int expected;
  14. private int valueOne;
  15. private int valueTwo;
  16. @Parameters
  17. public static Collection<Integer[]> getTestParameters(){
  18. List<Integer[]> list = new ArrayList<Integer[]>();
  19. list.add(new Integer[]{20,4,5});  //expected,valueOne,valueTwo
  20. list.add(new Integer[]{-20,-4,5});
  21. list.add(new Integer[]{0,0,5});
  22. return list;
  23. }
  24. public TestCalcaute(int expected, int valueOne, int valueTwo){
  25. this.expected = expected;
  26. this.valueOne = valueOne;
  27. this.valueTwo = valueTwo;
  28. }
  29. @Before
  30. public void setUp(){
  31. calcaute = new Calcaute();
  32. }
  33. @Test
  34. public void testAdd(){
  35. int result = calcaute.ride(valueOne, valueTwo);
  36. assertEquals(expected, result);
  37. }
  38. }

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)的更多相关文章

  1. Java基础-继承-编写一个Java应用程序,设计一个汽车类Vehicle,包含的属性有车轮个数 wheels和车重weight。小车类Car是Vehicle的子类,其中包含的属性有载人数 loader。卡车类Truck是Car类的子类,其中包含的属性有载重量payload。每个 类都有构造方法和输出相关数据的方法。最后,写一个测试类来测试这些类的功 能。

    #29.编写一个Java应用程序,设计一个汽车类Vehicle,包含的属性有车轮个数 wheels和车重weight.小车类Car是Vehicle的子类,其中包含的属性有载人数 loader.卡车类T ...

  2. 29.编写一个Java应用程序,设计一个汽车类Vehicle,包含的属性有车轮个数 wheels和车重weight。小车类Car是Vehicle的子类,其中包含的属性有载人数 loader。卡车类Truck是Car类的子类,其中包含的属性有载重量payload。每个 类都有构造方法和输出相关数据的方法。最后,写一个测试类来测试这些类的功 能。

    //Vehicle类 package d922A; public class Vehicle { private int wheels; private double weight; Vehicle( ...

  3. (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 ...

  4. (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 ...

  5. 编写一个Java应用程序,设计一个汽车类Vehicle,包含的属性有车轮个数 wheels和车重weight。小车类Car是Vehicle的子类,其中包含的属性有载人数 loader。卡车类Truck是Car类的子类,其中包含的属性有载重量payload。每个 类都有构造方法和输出相关数据的方法。最后,写一个测试类来测试这些类的功 能。

    package car; public class Vehicle { //定义成员变量 private int wheels; private double weight; public int g ...

  6. JUit——(三)JUnit核心对象(测试、测试类、Suit和Runner)

    JUnit的核心对象:测试.测试类.测试集(Suite).测试运行器 1. 测试: @Test注释的.公共的.不带有任何参数.并且返回void类型的方法 2. 测试类: 公共的,包含对应类的测试方法的 ...

  7. Spring4.2.3+Hibernate4.3.11整合( IntelliJ maven项目)(使用Annotation注解)(Junit测试类)

    1. 在IntelliJ中新建maven项目 给出一个建好的示例 2. 在pom.xml中配置依赖 包括: spring-context spring-orm hibernate-core mysql ...

  8. 15.junit测试类使用及注解

    1.junit简介 JUnit是一个Java语言的单元测试框架,可以大大缩短你的测试时间和准确度.多数Java的开发环境都已经集成了JUnit作为单元测试的工具. 2.实现junitDemo示例 2. ...

  9. python调用HTMLTestRunner+unittest实现一次执行多个测试类,并生成与每个测试类对应的测试报告,具体看代码,附上整个project代码

    python自动化框架雏形,根据自己需要封装:ui自动化,接口自动化均可适用,python版本为python3.x,不要问我为什么不用python2.x,附上整个project代码:http://fi ...

随机推荐

  1. markdown与html之间转换引发的问题

    https://www.hackersb.cn/hacker/235.html 看了这位师傅的文章有感而发 前言 对于支持markdown语法的网站,一般都是在后端将markdown语法渲染为html ...

  2. 洛谷 P1352 没有上司的舞会【树形DP/邻接链表+链式前向星】

    题目描述 某大学有N个职员,编号为1~N.他们之间有从属关系,也就是说他们的关系就像一棵以校长为根的树,父结点就是子结点的直接上司.现在有个周年庆宴会,宴会每邀请来一个职员都会增加一定的快乐指数Ri, ...

  3. jsp页面中获取session中的值

    Jsp中获取Session: session是jsp的内置对象,所以你可以直接写在jsp的 <% session.setAttribute("a", b); //把b放到se ...

  4. 使用screen后台实时执行命令

    在做一个大体积的数据备份时,在远程终端上直接运行备份脚本back.sh,或运行back.sh&放到后台运行,此时关闭远程终端,或网络断开都会让命令停止运行.此时就要使用到screen命令. s ...

  5. VB查询数据库之终极篇——机房收费系统总结(七)

    机房收费系统总结系列到此就算是要结束了.在做机房收费系统之前,做了学生管理系统,可以说,对机房收费系统的帮助很大. 在机房收费系统中,数据库的查询,数据写入数据库,更改数据库内的信息等一些操作在学生信 ...

  6. java 抽象方法 能用 静态 static 修饰,或者 native 修饰 么

    韩梦飞沙  韩亚飞  313134555@qq.com  yue31313  han_meng_fei_sha static与abstract不能同时使用 用static声明方法表明这个方法在不生成类 ...

  7. [xsy2123]毛毛虫

    题意:有一棵带点权的树,链修改是把$(x,y)$这条链和与其相邻的节点都加上一个数,查询是问$(x,y)$这条链和与其相邻的节点的权值和 学到了一个新姿势? 考虑树链剖分,在剖重链时每次给当前节点的儿 ...

  8. 【动态规划】CDOJ1692 这是一道比CCCC简单题更有想象力的中档题

    f(i,j)表示打了i行出现j个bug的方案数. 还是跟背包有点像嘛. #include<cstdio> using namespace std; int n,m,b,mod,a[510] ...

  9. 【树形dp】VK Cup 2012 Round 1 D. Distance in Tree

    统计树中长度为K的路径条数. 用f[u][k]表示从u结点的子树中出发,终止于u结点的长度为k的路径条数. 边dp边统计答案.为了防止重复统计,在枚举子节点的时候,先将该子节点和当前u结点(和前面已经 ...

  10. 【DFS】POJ3009-Curling 2.0

    [题目大意] 给出一张地图,一旦往一个方向前进就必须一直向前,直到一下情况发生:(1)碰到了block,则停在block前,该block消失:(2)冲出了场地外:(3)到达了终点.改变方向十次以上或者 ...