JUnit小记
一、参数测试
/**
* 1、更改测试运行器为RunWith(Parameterized.class)
* 2、声明变量用来存放预期值与结果值
* 3、为测试类声明一个带有参数的公共构造方法,并在其中为声明变量赋值
* 4、声明一个返回值为Collection的公共静态方法,并使用@Parameters进行修饰。数组里就是你要测试的参数。
*/
具体步骤:
1、引入包 import org.junit.runners.Parameterized.Parameters;
2、在类上 加 @RunWith 注释,指定该测试类 和 Parameterized 类一起运行。
@RunWith(Parameterized.class)
public class abc{...}
3、 声明变量用来存放预期值与结果值,创建一个持有这些参数类型的构造函数,并关联;
String p1;
boolean p2;
public abc(String p1, boolean p2){
this.p1=p1; this.p2=p2;
}
4、创建一个返回 Collection 类型的 static 方法,并用 @Parameter 注释加以修饰。
@Parameters
public static Collection parametersValues() {
return Arrays.asList(new Object[][] {
{"A", true },
{"BB", false },
{"CCC", true },
{"DDDD", false }});
}
5、创建通用测试。
@Test
public void goTest(){
System.out.println( p1 + " --- " + p2 );
}
二、测试套件
如果要同时测试多个类,可以新增一个测试套件,将多个所有测试类包含进去,每次执行测试套件类的时候,就会把包含的测试类全都执行一遍。
import org.junit.runner.RunWith;
import org.junit.runners.Suite; /*如果要同时测试多个类, 可以新增一个测试套件, 将多个所有测试类包含进去, 每次执行测试套件类的时候, 就会把包含的测试类全都执行一遍
*
* 使用 @RunWith注解,更改测试运行器为Suite.class,将要测试的类作为数组传入到Suite.SuiteClasses({})中,
*
* 测试套件类不能包含其他测试方法
*
* 测试套件也可以包含其他的测试套件,具体用法和包含多个测试类是一样的
* */ @RunWith(Suite.class)
@Suite.SuiteClasses({ JunitTest.class, RegularExpressionJUnit4Test.class})
public class SuiteTest {
//类空着
}
三、注意事项
测试方法必须使用public void进行修饰,不能带参数
一般使用单元测试会新建一个test目录存放测试代码,在生产部署的时候只需要将test目录下代码删除即可
测试代码的包应该和被测试代码包结构保持一致
测试单元中的每个方法必须可以独立测试,方法间不能有任何依赖 测试失败说明:
Failure:一般是由于测试结果和预期结果不一致引发的,表示测试的这个点发现了问题
error:是由代码异常引起的,它可以产生于测试代码本身的错误,也可以是被测试代码中隐藏的bug 一些常用注解:
@Test(excepted=xx.class): xx.class表示异常类,表示测试的方法抛出此异常时,认为是正常的测试通过的
@Test(timeout=毫秒数) :测试方法执行时间是否符合预期
@BeforeClass: 会在所有的方法执行前被执行,static方法
@AfterClass:会在所有的方法执行之后进行执行,static方法
@Before:会在每一个测试方法被运行前执行一次
@After:会在每一个测试方法运行后被执行一次
@Ignore:所修饰的测试方法会被测试运行器忽略
@RunWith:可以更改测试运行器org.junit.runner.Runner
@Parameters:参数化注解
四、断言方法
void assertEquals([String message], expected value, actual value)
断言两个值相等。值可能是类型有 int, short, long, byte, char or java.lang.Object. 第一个参数是一个可选的字符串消息
void assertTrue([String message], boolean condition) 断言一个条件为真
void assertFalse([String message],boolean condition) 断言一个条件为假
void assertNotNull([String message], java.lang.Object object) 断言一个对象不为空(null)
void assertNull([String message], java.lang.Object object) 断言一个对象为空(null)
void assertSame([String message], java.lang.Object expected, java.lang.Object actual) 断言,两个对象引用相同的对象
void assertNotSame([String message], java.lang.Object unexpected, java.lang.Object actual) 断言,两个对象不是引用同一个对象
void assertArrayEquals([String message], expectedArray, resultArray)
断言预期数组和结果数组相等。数组的类型可能是 int, long, short, char, byte or java.lang.Object.
JUnit小记的更多相关文章
- 记一个mvn奇怪错误: Archive for required library: 'D:/mvn/repos/junit/junit/3.8.1/junit-3.8.1.jar' in project 'xxx' cannot be read or is not a valid ZIP file
我的maven 项目有一个红色感叹号, 而且Problems 存在 errors : Description Resource Path Location Type Archive for requi ...
- [原]Paste.deploy 与 WSGI, keystone 小记
Paste.deploy 与 WSGI, keystone 小记 名词解释: Paste.deploy 是一个WSGI工具包,用于更方便的管理WSGI应用, 可以通过配置文件,将WSGI应用加载起来. ...
- 「译」JUnit 5 系列:条件测试
原文地址:http://blog.codefx.org/libraries/junit-5-conditions/ 原文日期:08, May, 2016 译文首发:Linesh 的博客:「译」JUni ...
- AndroidStudio — Error:Failed to resolve: junit:junit:4.12错误解决
原博客:http://blog.csdn.net/u013443865/article/details/50243193 最近使用AndroidStudio出现以下问题: 解决:打开app下的buil ...
- 「译」JUnit 5 系列:环境搭建
原文地址:http://blog.codefx.org/libraries/junit-5-setup/ 原文日期:15, Feb, 2016 译文首发:Linesh 的博客:环境搭建 我的 Gith ...
- [深入JUnit] 测试运行的入口
阅读前提 了解JUnit 对JUnit的内部实现有兴趣 不妨看看[深入JUnit] @Before, @After, @Test的秘密] 代码版本: junit 4.12代码搜索工具: http:// ...
- 「译」JUnit 5 系列:扩展模型(Extension Model)
原文地址:http://blog.codefx.org/design/architecture/junit-5-extension-model/ 原文日期:11, Apr, 2016 译文首发:Lin ...
- 「译」JUnit 5 系列:架构体系
原文地址:http://blog.codefx.org/design/architecture/junit-5-architecture/ 原文日期:29, Mar, 2016 译文首发:Linesh ...
- 「译」JUnit 5 系列:基础入门
原文地址:http://blog.codefx.org/libraries/junit-5-basics/ 原文日期:25, Feb, 2016 译文首发:Linesh 的博客:JUnit 5 系列: ...
随机推荐
- UIKit class hierarchy
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY3puY2Rtcw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA ...
- 创建了几个String对象?
String str = "a"; 1个,在常量池中创建了一个字符串对象. String str = new String("a"); 2个,在常量池中创建了一 ...
- C# 取时间段年、月、日、季度
DateTime dt = DateTime.Now; //当前时间 DateTime startWeek = dt.AddDays(1 - Convert.ToInt32( ...
- AsyncHttpClient来完成网页源代码的显示功能,json数据在服务器端的读取还有安卓上的读取
一.使用AsyncHttpClient来完成网页源代码的显示功能: 首先.我们引入 步骤: 1.添加网络权限 2.判断网页地址是否为空 3.不为空的情况下创建客户端对象 4.处理get/post请求 ...
- Easyui 二级菜单
<div class="fitem"> <label>所在城市:</label> <input id="cityId" ...
- WCF实现客户端和服务端
service side 1.定义ServiceContract: 2.new a ServiceHost 3. add endpoint using System.ServiceModel; nam ...
- window下安装Node.js NPM
一.安装Node.js 下载地址:http://nodejs.org/download/ 1..msi文件,直接安装,包括了npm,结束. 2..exe文件,把node.exe所在主目录,加入到系统P ...
- 点滴积累【C#】---C#实现上传照片到物理路径,并且将地址保存到数据库,
效果: 思路: 首先,获取图片物理地址,然后进行判断将图片保存到文件夹下,再将图片的信息保存到数据库. 数据库: create table image1 ( ID ,) primary key, Im ...
- 品茗论道说广播(Broadcast内部机制讲解)(上)
1 概述 我们在编写Android程序时,常常会用到广播(Broadcast)机制.从易用性的角度来说,使用广播是非常简单的.不过,这个不是本文关心的重点,我们希望探索得再深入一点儿.我想,许多人也不 ...
- python之histogram
histogram A histogram is an accurate representation of the distribution of numerical data. It is an ...