上次只是大概记录了下junit4几个常见标签的用法。

在这篇文章中,我们来进一步分析junit4的用法。

1.断言

junit4中一个很常见的用法就是断言。说到断言,大家再熟悉不过了。不过也许有的朋友会有些疑问,为嘛有时候用assertEquals而有时候看到别人又用Assert.assertEquals()。其实两个的用法都是一样的,只是引入包的时候有点区别,只要你用心观察你会发现,用assertEquals时是“import static org.junit.Assert.*”,这是一个静态包含(static),是JDK5中新增的一个功能。也就是说assertEquals是assertEquals是Assert类中的一系列的静态方法,一般的使用方式是Assert. assertEquals(),但是使用了静态包含后,前面的类名就可以省略了,使用起来更加的方便。不过具体用哪个还是看个人习惯啦。

2.限时测试

有些程序的逻辑比较复杂,循环嵌套深,很有可能出现死循环。或者是测前端的时候有时候由于网速的原因,过了很长时间还是找不到某些页面元素。这时候我们可能希望程序会有某些处理机制。限时测试就是一个很好地解决方案。我们可以给我们的测试函数设定一个时间,超过了这个时间,就判定测试失败,并终止这个用例的执行。

要实现这一功能,给@Test标签加一个参数就行。

如:

@Test(timeout=1000)

public void test(){

....

}

以上表明如果程序在1000ms(注意这里的单位是ms),也就是1s内没有执行完,则test失败。

3.异常测试

有时候我们编写的函数需要抛出异常,那么我们在测试这个程序的时候肯定也就希望能捕获这个异常,如果没有捕获到,则说明测试失败。

@Test(expected=MyException.class)

public void test(){

}

4.Suite测试

请参照文章“用junit testSuite管理测试用例” http://www.cnblogs.com/weiweiyao/p/4092877.html

这个就不说了,之前写过。

5.参数化测试

你可能遇到过这样的函数,它的参数有许多特殊值,或者说他的参数分为很多个区域。举一个比较简单的例子吧,像如下函数:

public class Try {

public  int result=3;

public  int add(int n) {

result += n;

return result;

}

}

如果我想测试不同的输入值,则我需要写很多个@Test方法。如果测试的函数再复杂些,有各种边界值需要校验的话,那么你可能就需要写更多的@Test方法了。

比如:

@Test

public void test1(){

assertEquals(1,4);

}

@Test

public void test2(){

assertEquals(3,6);

}

但是如果用参数化测试的话,可以简化,我们只需要写一个测试函数,就可以把若干种情况作为参数传递进去,一次性的完成测试。

测试代码如下:

import java.util.Arrays;

import java.util.Collection;

import org.junit.Test;

import org.junit.runner.RunWith;

import org.junit.runners.Parameterized;

import org.junit.runners.Parameterized.Parameters;

import junit.framework.TestCase;

//步骤1.指定特殊的运行器Parameterized.class

//顺便说明一下junit的运行原理:Junit运行时都是由一个runner运行的。指定一个Runner,需要使用@RunWith标注,并且把你所指定的Runner作为参数传递给它。那为什么我们平时没有用到@RunWith,也能运行呢:那是因为系统自动使用了默认的Runner来运行你的代码

@RunWith(Parameterized.class)

public class TryTest extends TestCase {

//步骤2:为测试类声明几个变量,分别用于存放期望值和测试所用数据。此处我只放了测试所有数据,没放期望值。

private int param,result;

//步骤3:申明构造函数

public TryTest(int param, int result) {

super();

this.param = param;

this.result = result;

}

//步骤4:定义测试数据的集合,该方法可以任意命名

//但是必须使用@Parameters标注进行修饰

//这个方法的框架就不予解释了,大家只需要注意其中的数据,是一个二维数组,数据两两一组

//每组中的这两个数据,一个是参数,一个是你预期的结果。

//比如我们的第一组{1, 4},1就是参数,4就是预期的结果。分别对应上面构造函数的param和result

@Parameters

public static  Collection testDate(){

Object[][] object = {

{ 1, 4},

{ 3, 6 },

{1,3}};

return Arrays.asList(object);

}

//步骤5:编写测试方法,使用定义的变量作为参数进行测试

//这里的编写方法和以前的测试方法一样

@Test

public void testAdd(){

Try test=new Try();

assertEquals(result,test.add(param));

}

}

测试结果:

(1,4)测试通过,(3,6)测试通过,(1,3)测试不通过,期望结果是3(故意把预期结果写错),实际结果却是4。

6.设置忽略某个测试用例

     对于你暂时不想运行的test case, 在该方法前添加@Ignore
@Ignore("Not Ready to Run" )        
@Test     
public void test1() {        
        assertEquals(1, 4);        
}

junit4的进一步探讨的更多相关文章

  1. 3.C#中泛型类的进一步探讨

    阅读目录 一:多重泛型  class不仅可以有T,还可以有K,实例化的时候传多个数据类型的类型,C#集合类型中的Dictionary就是多重泛型 using System; using System. ...

  2. Vivado Logic Analyzer的进一步探讨

    本文基于Vivado 2014.2,代码基于文章http://blog.chinaaet.com/detail/37239中使用的代码. 这一篇仅讨论在综合后的Netlist中选择信号进行捕获的方法. ...

  3. (十六)WebGIS中偏移补偿量引发的问题之探讨

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1.背景 在上一章里讲解地图平移功能的实现时,我在最后提出了两个问题: ...

  4. NN:神经网络算法进阶优化法,进一步提高手写数字识别的准确率—Jason niu

    上一篇文章,比较了三种算法实现对手写数字识别,其中,SVM和神经网络算法表现非常好准确率都在90%以上,本文章进一步探讨对神经网络算法优化,进一步提高准确率,通过测试发现,准确率提高了很多. 首先,改 ...

  5. SQL Server-聚焦APPLY运算符(二十七)

    前言 其实有些新的特性在SQL Server早就已经出现过,但是若非系统的去学习数据库你会发现在实际项目中别人的SQL其实是比较复杂的,其实利用新的SQL Server语法会更加方便和简洁,从本节开始 ...

  6. SQL Server-聚焦UNIOL ALL/UNION查询(二十三)

    前言 本节我们来看看有关查询中UNION和UNION ALL的问题,简短的内容,深入的理解,Always to review the basics. 初探UNION和UNION ALL 首先我们过一遍 ...

  7. SQL Server-聚焦计算列持久化(二十一)

    前言 上一节我们结束了Hash Match Aggregate和Stream Aggregate的讲解,本系列我们来讲讲关于SQL Server中的计算列问题,简短的内容,深入的理解,Always t ...

  8. 理解JavaScript中的“this”

    对于javascript的初学者来说,一般对“this”关键字都感到非常迷惑.本文的目的旨在让你全面的了解“this”,理解在每一个情景下如何使用“this”,希望通过本文,可以帮助同学们不在害怕“t ...

  9. 关于ie6/7下的z-index

    z-index这个属性其实在挺多地方都会用到,在百度上搜索也有大量关于z-index的篇幅去阐述这个属性,特别是在ie6下的z-index处理有更多的相关文章,本文就不再围绕z-index这一属性的基 ...

随机推荐

  1. 长乐国庆集训Day5

    T1 方阵 题目 [题目描述] 小澳最近迷上了考古,他发现秦始皇的兵马俑布局十分有特点,热爱钻研的小澳打算在电脑上还原这个伟大的布局. 他努力钻研,发现秦始皇布置兵马俑是有一定规律的.兵马俑阵总共有n ...

  2. Django框架第九篇--Django和Ajax、序列化组件(serializers)、自定义分页器、模型表choice参数

    Django和Ajax 一.什么是Ajax AJAX(Asynchronous Javascript And XML)翻译成中文就是“异步的Javascript和XML”.即使用Javascript语 ...

  3. 异常处理和UDP Socket套接字

    一.异常处理 1.什么是异常处理: 程序在运行过程中出现了不可预知的错误,并且该错误没有对应的处理机制,那么就会以异常的形式表达出来,造成的影响就是整个程序无法再正常进行. 2.异常的结构: 1.异常 ...

  4. Geoserver发布强制显示标签处理

    TextSymbolizer 增加如下配置: <!--  标签重叠也显示  --> <VendorOption name="conflictResolution" ...

  5. Hive 系列(三)—— Hive CLI 和 Beeline 命令行的基本使用

    一.Hive CLI 1.1 Help 使用 hive -H 或者 hive --help 命令可以查看所有命令的帮助,显示如下: usage: hive -d,--define <key=va ...

  6. Mybatis中使用collection进行多对多双向关联示例(含XML版与注解版)

    Mybatis中使用collection进行多对多双向关联示例(含XML版与注解版) XML版本: 实体类: @Data @NoArgsConstructor public class Course ...

  7. BFC特性及其简单应用

    BFC是什么? BFC(Block Formatting Context)中文直译就是‘块级格式上下文’,它是 W3C CSS 2.1 规范中的一个概念,它决定了元素如何对其内容进行定位,以及与其他元 ...

  8. JavaScript中setInterval函数应用常见问题之一(第一个参数不加引号与加引号的区别)

    学过JavaScript 脚本语言的都应该接触过setInterval 函数.如何使用我想大家都知道,但是有时候对于刚刚接触JavaScript的朋友来讲,还是会在使用的时候碰到这样或那样的问题而感到 ...

  9. 关于ABViewer的疑问解答

    很多 CAD小伙伴都对 ABViewer 这款软件不陌生吧.ABViewer 是用来处理图纸和工程文档管理的一款通用软件.可以用它来查看,编辑,转换,测量和打印DWG和其他CAD文件,以及3D模型和光 ...

  10. 基于 Express + MySQL + Redis 搭建多用户博客系统

    1. 项目地址 https://github.com/caochangkui/node-express-koa2-project/tree/master/blog-express 2. 项目实现 Ex ...