JUnit3 一次运行多个测试类和进行多次重复测试:使用测试套件和RepeatedTest

测试套件

  如果测试类写到很多,每次要进行测试,难道要重新点击每一个测试类来运行?如果有200个测试类要测试呢?

  为了解决这个问题,引入了测试套件(TestSuite)

  通过将多个测试放入套件中,一并执行多个测试。

 

实例:一次运行多个测试类

  比如,有两个测试类,叫CalculatorTest和CalculatorTest2。

  在测试类所在的包中新建一个类,叫做TestAll,如下:

package com.mengdd.junit;import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;public class TestAll extends TestCase
{public static Test suite(){// 创建一个测试套件TestSuite suite = new TestSuite();// 增加测试类的class对象suite.addTestSuite(CalculatorTest.class);suite.addTestSuite(CalculatorTest2.class);return suite;}
}

  运行时,右键这个类,Run As ->JUnit Test:

 

  就相当于运行了CalculatorTest和CalculatorTest2。

 

实例:进行方法的重复测试

  如果要对某个方法进行多次测试,可以使用RepeatedTest

  使用时注意,测试类需要一个带参数(String)的构造函数,将String参数传给基类TestCase,调用基类的带参数的构造函数。

  于是修改之前的代码如下:

被测试类不变:

Calculator
package com.mengdd.junit;public class Calculator
{public int add(int a, int b){return a + b;}public int subtract(int a, int b){return a - b;}public int multiply(int a, int b){return a * b;}public int divide(int a, int b) throws Exception{if(0 == b){throw new Exception("除数不能为0");            }return a / b;}
}

 

测试类:

CalculatorTest
package com.mengdd.junit;import junit.framework.Assert;
import junit.framework.TestCase;public class CalculatorTest extends TestCase
{private Calculator calculator = null;public CalculatorTest(){super();}public CalculatorTest(String name){super(name);}@Overridepublic void setUp() throws Exception{System.out.println("set up");// 生成成员变量的实例calculator = new Calculator();System.out.println(calculator);}@Overridepublic void tearDown() throws Exception{System.out.println("tear down");}public void testAdd(){int result = calculator.add(1, 2);// 判断方法的返回结果Assert.assertEquals(3, result);// 第一个参数是期望值,第二个参数是要验证的值
    }public void testSubtract(){int result = calculator.subtract(1, 2);// 判断方法的返回结果Assert.assertEquals(-1, result);// 第一个参数是期望值,第二个参数是要验证的值
}public void testMultiply(){int result = calculator.multiply(2, 3);// 判断方法的返回结果Assert.assertEquals(6, result);// 第一个参数是期望值,第二个参数是要验证的值
}public void testDivide(){int result = 0;try{result = calculator.divide(12, 3);}catch (Exception e){e.printStackTrace();// 如果抛出异常,证明测试失败,没有通过,没通过的测试计数在Failures中
            Assert.fail();// 如果不加这一行,如果程序进入到catch,无法判断其失败
        }// 判断方法的返回结果Assert.assertEquals(4, result);// 第一个参数是期望值,第二个参数是要验证的值
}public void testDivideByZero(){Throwable tx = null;int result = 0;try{result = calculator.divide(12, 0);Assert.fail("没有抛出异常,测试失败");// 如果执行到这行代码,则证明没有抛出异常,说明我们的验证失败
        }catch (Exception e){e.printStackTrace();tx = e;}Assert.assertEquals(Exception.class, tx.getClass());// 抛出的异常类型是否和期望一致Assert.assertEquals("除数不能为0", tx.getMessage());// 抛出的异常信息是否和期望一致//如果上面两个都通过,则测试通过
}}

 

测试套件类:

package com.mengdd.junit;import junit.extensions.RepeatedTest;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;public class TestAll extends TestCase
{public static Test suite(){// 创建一个测试套件TestSuite suite = new TestSuite();// 增加测试类的class对象suite.addTestSuite(CalculatorTest.class);suite.addTestSuite(CalculatorTest2.class);// 测试某个方法多次,注意测试类需要提供带参数的构造方法suite.addTest(new RepeatedTest(new CalculatorTest("testSubtract"), 20));return suite;}
}

 

运行结果:

 

 

 

参考资料

  圣思园张龙老师视频教程

转载于:https://www.cnblogs.com/mengdd/archive/2013/04/07/3006265.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/261809.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DataGridView控件初始化,添加删除行(不绑定数据库)

转载: http://blog.163.com/zjlovety126/blog/static/2241862420106128264300/ 也不知道是否该应用这个控件,不过也想不出该用其他什么控件,关键是俺比较菜没什么经验。 要求是这样的,用户一次添加一个任务,这个任务有…

mysql 不同分区 同时insert_Mysql分区表的原理和优缺点

分区表的原理分区表是由多个相关的底层表实现,这些底层表也是由句柄对象表示,所以我们也可以直接访问各个分区,存储引擎管理分区的各个底层表和管理普通表一样(所有的底层表都必须使用相同的存储引擎),分区表的索引只是在各个底层…

计算机应用 范文,计算机应用基础(范文).doc

第 PAGE \* Arabic 1 页计算机应用基础(范文)PAGE计算机应用基础5一、单选题1、第一台电子计算机是1946年在美国研制成功的,该机的英文缩写名是_ A:ENIAC _____。2、关于计算机的分类方法有多种,下列选项中不属于按计算机处理数据的方式进行分…

架构漫谈(八):从架构的角度看如何写好代码

2016-03-03 王概凯Kevin 聊聊架构架构漫谈是由资深架构师王概凯Kevin执笔的系列专栏,专栏将会以Kevin的架构经验为基础,逐步讨论什么是架构、怎样做好架构、软件架构如何落地、如何写好程序等问题。 本文是漫谈架构专栏的第八篇,作者Kevin举例…

大理三塔,及崇圣寺里的假深沉

大理三塔,及崇圣寺里的假深沉 记得我第一次看见三塔时,是一副破败不堪的景象。而第二次来大理时,因为“崇圣寺”正在修葺,只能远远地眺望一下三塔。那时我对大理失望极了。 现在三塔修缮一新,给人耳目一新的感觉。 三塔…

WCF三种通信模式(转)

一、概述 WCF在通信过程中有三种模式:请求与答复、单向、双工通信。以下我们一一介绍。 二、请求与答复模式 描述: 客户端发送请求,然后一直等待服务端的响应(异步调用除外),期间处于假死状态,直到服务端有了答复后才能…

python语言打印菱形_Python打印菱形

使用python打印出菱形:*************************思想:平常我写这种代码的时候,总是自然地使用二层循环,今天老师教了一个特别好的方法,化二维为一维。我觉得代码优化是很重要的,所以把它写下来&#xff0c…

计算机软件及应用stata,蒙特卡洛模拟及其Stata应用实现

蒙特卡洛模拟及其Stata应用实现出版时间:2015年版丛编项:海南大学经济管理系列丛书内容简介《蒙特卡洛模拟及其Stata应用实现》的第1章是Stata软件基础,主要介绍了Stata软件的一些基本功能与操作。第2章介绍了Stata软件的语法结构&#xff0c…

第一个程序,Hello World

在eclipse里新建一个project,选Android-Android Project 然后Next,继续 解释一下 Package Name:这个学过编程的人都应该熟悉了,类似于namespace,你定义的所有东西都在一个包里不会和别的包出现重命名的问题等等,不多说…

Hadoop2.6集群动态添加和删除数据节点

2019独角兽企业重金招聘Python工程师标准>>> 开始之前,应该把所有新增数据节点上的Hadoop环境都配置好(如果要直接复制已经存在节点的hadoop文件夹,应该删掉里面已经产生的集群数据,比如tmp和data目录,不然…

读操作系统的设计与实现--进程互斥

1.竞争条件 当两个或多个进程读写某些共享数据时,而最后的结果取决于进程的运行顺序时,这就称为竞争条件。包含竞争条件的程序,大多数时候运行结果良好,但是往往会发生一些无法解释的结果。事实上,只要涉及到共享资源的…

拉取ftp服务器上的文件_winscp和云服务器,2步实现winscp将文件上传到腾讯云Linux云服务器...

WinSCP是一个Windows环境下使用SSH的开源图形化SFTP客户端。同时支持SCP协议,它的主要功能就是在本地与远程计算机间安全的复制文件。与使用FTP上传代码相比,通过WinSCP可以直接使用服务器账户密码访问云服务器,无需在服务器端做任何配置。II…

计算机技术qq交流群,专业计算机群QQ

我想学习计算机的程序没什么基础 应该怎么做学什么 要怎么样才可以学好楼上的说得不对,直接学C就可以了,C不用学得太深,学些基本语法,然后转学C,因为C是面向对象的编程思想,把C的基础编程弄明白以后,可以从Visual C,C#,C。Net中选一项来学,先学些基础的,然后做些小项目,然后可以…

笔记:设计模式(3)-Abstract Factory抽象工厂模式

工厂模式的起源 1.变化点在“对象的创建”,因此就封装“对象创建”; 2.面向接口编程,依赖接口,而非依赖实现。 动机(Motivation) 在系统中,经常面临着“一系列相互以来的对象”的创建工作&#…

MongoDB操作:insert()

2019独角兽企业重金招聘Python工程师标准>>> Override public boolean inSert(String dbName, String collectionName, String[] keys,Object[] values) { DB db null; DBCollection dbCollection null; WriteResult result null; String resul…

python文件批量改名_python文件批量重命名

python文件批量重命名代码如下:# -*- coding: gbk -*-import osclass fileRename():def __init__(self, path):self.__path pathself.__order {}self.__files os.listdir(path)def list(self):return self.__filesdef presolve(self, string):for _ in string.sp…

内存管理简介之Buddy算法和slab分配

1.Buddy算法linux对空闲内存空间管理采取buddy算法,Buddy算法:把内存中所有页面按照2^n划分,其中n0~5,每个内存空间按1个页面、2个页面、4个页面、8个页面、16个页面、32个页面进行六次划分。划分后形成了大小不等的存储块&#x…

人工操作阶段计算机是如何工作的,管理信息系统作业参考答案

(一)、单项选择题1. 系统实施阶段的主要内容之一是(A)。A.系统物理配置方案的设计 B.输入设计C.程序设计 D.输出设计2. 结构化方法中,自顶向下原则的确切含义是(A)A 先处理上级机关事务,再处理下级机关事务B 先进行总体设计,后进行详细设计C …

最近处理的几个小问题_20160311

最近处理的小问题很多,我就拿出来几个,简单和大家说一说。我就分为三个方面,硬件问题,Oracle表空间迁移,MySQL断电恢复首先是硬件问题。如果看到下面的系统日志,就会发现早在2014年就出现了一些警告和问题&…

3. 什么是icmp?icmp与ip的关系_你知道如何跟女生,确定恋人关系吗?

哈喽!同学你好!我是子伯,是一名情感咨询。今天我想给你分享,和女生再暧昧期,如何去确定关系,因为......在我做咨询当中,有很多男生跟女生,不管是在聊天上,还是在线下的交…