junit3.8的使用
今天开始junit使用系列,第一篇梳理junit3X系列,先贴下代码来体验下。
测试源代码如下:
package test.junit38test; /**
* @创建作者: LinkinPark
* @创建时间: 2016年1月26日
* @功能描述: 这里写一个算法类,实现加减乘除
*/
public class Linkin
{ 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)
{
return a / b;
} }
测试类代码如下:
package test.junit38test; import junit.framework.TestCase; /**
* @创建作者: LinkinPark
* @创建时间: 2016年1月26日
* @功能描述: Linkin算法类的测试类
*/
public class LinkinTest extends TestCase
{
private Linkin linkin = null; public void setUp()
{
System.out.println("这里运行每个测试实例以前的准备工作。。。");
linkin = new Linkin();
System.out.println("linkin对象:"+linkin.toString());
} public void testAdd()
{
System.out.println("这里是加法的测试用例。。。");
} public void testSubtract()
{
System.out.println("这里是减法的测试用例。。。");
} public void tearDown()
{
System.out.println("这里运行每个测试实例之后的销毁动作。。。");
System.out.println("=========华丽丽的分割线===========");
} }
控制台输入如下:
- 测试类编写规则:
1,源代码和测试代码需要分开。我们不要在源代码中直接编码自己的测试代码,不利于代码的管理,应该养成良好的习惯。
2,测试类和目标源代码的类应该位于同一个包下面,即它们的包名应该一样。这样子有一个好处就是说,我们在测试代码中编写不需要导入源代码的包。
其实这也就是maven的一种约定的目录结构,利于我们很直观的编写代码。
3,测试类的命名规则:如果源代码类型是Linkin,那么相关该测试类就叫LinkinTest。如果源代码测试方法是add,那么相关该测试方法方法名就叫testAdd。
完整的约定目录结构如下:
- 测试类编写的注意点:
1,测试类必须继承于TestCase。这里类在junit framework下,继承该类表示你写的这个类是测试类,可以嫁入3Xjunit来进行测试。
最简单的看看你是否可以运行你的测试类,就是右键然后选择run as。如果不继承这个类是不会在eclipse中出现run as junit的。
2,测试类中所有的测试方法必须是void的,必须是无参的,方法名必须以test开头的,否则该测试方法不会被执行测试,最后一个条件,该方法必须是public的,否则报错。
下面故意编写几个错误的测试方法我们来看下效果:
如果方法名不是以test开头的,该方法不会纳入junit测试范围。比如如下测试方法就不会被测试:
public void ttestAdd()
{
System.out.println("这里是加法的测试用例。。。");
}
如果方法名以test开头,但是返回值不是void的,比如如下测试方法不会被执行测试:
public String testAdd()
{
System.out.println("这里是加法的测试用例。。。");
return "";
}
如果方法名以test开头,但是方法不是无参的,比如如下测试方法不会被执行测试:
public void testAdd(String str)
{
System.out.println("这里是加法的测试用例。。。");
}
如果方法名以test开头,但是不是用public来修饰。比如如下测试方法会被执行,但是报错:
void testAdd()
{
System.out.println("这里是加法的测试用例。。。");
}
3,每个测试方法之间一定要保持完全的独立性,不允许出现任何的依赖关系。这样子可以保证我们删除一些方法后不会对其他的方法产生任何的影响。我们不能依赖于测试方法的执行顺序。
4,每个测试方法执行前重复的代码放入setUp方法中,每个测试方法执行后重复的代码放入tearDown方法中。前面的初体验代码中,我们看控制台输出也发现了每次运行一个测试用例,就会重新执行setUp和tearDown方法,我们每次new的测试实例也并不是同一个,这样子就实现了上述我说的第3点了,包装每个测试方法方法相互独立,互不干扰。
OK,现在我已经比较介绍了junit3X系列如何使用了,接下来这里针对我们前面写的那个算法工具类,来写一个完整的测试类。具体代码如下:
package test.junit38test; import junit.framework.Assert;
import junit.framework.TestCase; /**
* @创建作者: LinkinPark
* @创建时间: 2016年1月26日
* @功能描述: Linkin算法类的测试类
*/
public class LinkinTest extends TestCase
{
private Linkin linkin = null; public void setUp()
{
linkin = new Linkin();
} public void testAdd()
{
int add = linkin.add(1, 1);
Assert.assertEquals(2, add);
} public void testSubtract()
{
int subtract = linkin.subtract(2, 1);
Assert.assertEquals(1, subtract);
} public void testMultiply()
{
int multiply = linkin.multiply(2, 1);
Assert.assertEquals(2, multiply);
} public void testDivide()
{
int divide = linkin.divide(2, 2);
Assert.assertEquals(1, divide);
} public void testDivide8Zero()
{
try
{
linkin.divide(2, 0);
fail("这里应该抛出异常被捕获的,结果却没有。。。");
}
catch (Exception e)
{
Assert.assertTrue(true);
}
} public void tearDown()
{
} }
在上面的代码中,值得一提的就是testDivide8Zero方法,该方法是测试异常的情况,比如说除法运算中,被除数肯定不能是空。
单元测试最主要的一方面就是在代码中执行测试情况的能力。我们要确保无论何时发生异常,我们都要做出相关的处理。所以我们就只能try,catch了。
1,在try中先执行的异常代码,这里应该人工fail()一个错误,就是说如果本来应该是异常的代码没有抛出异常那么这个时候就应该fail让他失败掉。
2,在catch中执行一个空的断言,确保try里面的错误代码被正确的捕获到了。
OK,关于3X系列的测试我暂时先说这么多,下一篇博客整理junit中的断言。
junit3.8的使用的更多相关文章
- 记一个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 ...
- Junit3断言
在Robotium自动化测试的过程中,发现没有断言的脚本是没有意义的,现整理Junit3和Junit4的断言,供日后查阅. http://junit.org/ Junit3断言API: http:// ...
- Junit3与Junit4的区别
Junit4最大的亮点就是引入了注解(annotation),通过解析注解就可以为测试提供相应的信息,抛弃junit3使用命名约束以及反射机制的方法. /** * 被测试类 */ package co ...
- 三分钟掌握 JUnit3.0
曾经公司做过一个.net的项目,在项目开发的过程中.我们採用的是分层的开发方式,大家先在一起讨论接口, 然后讨论完以后,形成文档,然后依照文档进行开发!这样就有一个问题,你必需要保证你的接口是正确的. ...
- JUnit3 结合一个除法的单元测试说明Assert.fail()的用法
之前一篇博文(JUnit基础及第一个单元测试实例(JUnit3.8))介绍了用JUnit做单元测试的基本方法,并写了一个简单的类Calculator,其中包含了整型加减乘除的简单算法. 本文通过完善其 ...
- junit3对比junit4
本文内容摘自junit实战,感谢作者的无私奉献. 个人觉得每个开源包的版本对比意义不大,闲来无事,这里就来整理一下好了.本文名为junit3对比junit4,但是我通过这篇博客主要也是想统一的来整理下 ...
- JUnit3 和 JUnit4的区别
JUnit3 和 JUnit4的区别 1.JUnit 4使用org.junit.*包而JUnit 3.8使用的是junit.Framework.*;为了向后兼容,JUnit4发行版中加入了这两种包. ...
- Junit3和Junit4使用区别
在项目经常会用到单元测试,这里对Junit在开发中的使用标准及使用方法进行简单的介绍. 1.包目录的定义以及相关jar包的添加 2.Junit3和Junit4分别对测试类的编写 所测试的源代码: pa ...
- junit3和junit4的区别总结
先来看一个例子: 先用junit3来写测试用例,如下: junit3测试结果: 从上面可看出: 1.junit3必须要继承TestCase类 2.每次执行一个测试用例前,junit3执行一遍setup ...
- junit3和junit4的使用区别如下
junit3和junit4的使用区别如下1.在JUnit3中需要继承TestCase类,但在JUnit4中已经不需要继承TestCase2.在JUnit3中需要覆盖TestCase中的setUp和te ...
随机推荐
- 【数论·欧拉函数】SDOI2008仪仗队
题目描述 作为体育委员,C君负责这次运动会仪仗队的训练.仪仗队是由学生组成的N * N的方阵,为了保证队伍在行进中整齐划一,C君会跟在仪仗队的左后方,根据其视线所及的学生人数来判断队伍是否整齐(如右图 ...
- Chris Richardson微服务翻译:微服务部署
Chris Richardson 微服务系列翻译全7篇链接: 微服务介绍 构建微服务之使用API网关 构建微服务之微服务架构的进程通讯 微服务架构中的服务发现 微服务之事件驱动的数据管理 微服务部署( ...
- JavaScript基础知识(正则表达式、字符串)
23.正则表达式 作用:定义一个特定的验证字符串内容规则的表达式 注:正则表达式并不是JavaScript独有的:JavaScript支持正则表达式 var a = { }; // 定义一个空对象 ...
- java_web学习(四) Date的理解与应用
1.日期 1.1 日期的本质: 是一个长整型long,最小单位是毫秒 1.2 日期的格式: 本次运用子类simpleDateformat定义格式 1.3 日期的运算 本次运用calendar类来的ad ...
- SDWebImage 加载显示 WebP 与性能问题
SDWebImage 加载显示 WebP 与性能问题 本文包含自定义下载操作 SDWebImageDownloaderOperation 与编码器 SDWebImageCoder.SDWebImage ...
- spring中Order注解
Spring在加载Bean的时候,有用到order注解. PS:顾名思义,Order是顺序,此注解可操作于类.方法.字段,当作用在类时,值越小,则加载的优先级越高! @Retention(Retent ...
- [51nod1254]最大子段和 V2
N个整数组成的序列a[1],a[2],a[3],-,a[n],你可以对数组中的一对元素进行交换,并且交换后求a[1]至a[n]的最大子段和,所能得到的结果是所有交换中最大的.当所给的整数均为负数时和为 ...
- [bzoj1806] [ioi2007]Miners 矿工配餐
相当于noip前两题难度的ioi题........ 还是挺好想的...算是状压一下?...两个二进制位可以表示三种食物或者没有,所以用四个二进制位表示某个煤矿最近两餐的情况... 先把各种情况加上各种 ...
- hdu3076—概率dp
hdu3076-概率dp 标签 : 概率dp 题目链接 题意: 2个人分别有AB的血数,轮流扔骰子,数小的自减一血,平的不变,谁先到减0, 谁输,问A赢的概率. 题解: dp[i][j]表示的是第一个 ...
- HDU--1213并查集
题目传送门:HDU--1213 //题意:ignatius过生日,客人来到,他想知道他需要准备多少张桌子.然而一张桌子上面只能坐上相互熟悉的人, //其中熟悉可定义成为A与B认识,B与C认识,我们就说 ...