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 ...
随机推荐
- Python模块学习------ 正则表达式
import re #f = open('data.txt','r') #for eachline in f.readlines(): #print re.split('\s\s+', eachlin ...
- 【数论·欧拉函数】SDOI2008仪仗队
题目描述 作为体育委员,C君负责这次运动会仪仗队的训练.仪仗队是由学生组成的N * N的方阵,为了保证队伍在行进中整齐划一,C君会跟在仪仗队的左后方,根据其视线所及的学生人数来判断队伍是否整齐(如右图 ...
- 5、ABPZero系列教程之拼多多卖家工具 修改User表结构
毕竟这个框架是外国人开发的,对于我们国人来说还是有些地方并不合适,就好比如注册时需要填写名字.姓氏一样,今天要说的就是如何去掉这2个字段. 先看如下修改完成的效果图 User表结构修改 修改User类 ...
- 意外断电数据库无法启动牵扯到异步IO的参数设置
一客户机房新装的UPS不太稳定,好几次意外断电,第3次意外断电之后问题终于来了, 数据库起不来了-- 数据库的硬件环境是一台IBM DS5020存储,2台IBM X3850 X5 软件环境是Linux ...
- 【转载】mysql主键的缺少导致备库hang
最近线上频繁的出现slave延时的情况,经排查发现为用户在删除数据的时候,由于表主键的主键的缺少,同时删除条件没有索引,或或者删除的条件过滤性极差,导致slave出现hang住,严重的影响了生产环境的 ...
- Java关于BufferedWriter.newline()换行的注意事项
最近项目中需要导出文件,其实导出文件是一个挺简单的事情.但是却遇到了很奇怪的问题. 首先导出到文件需要用到 BufferedWriter.而换行则是通过 bw.newline() 方法,问题将出在 n ...
- flask-script组件
Flask Script扩展提供向Flask插入外部脚本的功能,包括运行一个开发用的服务器,一个定制的Python shell,设置数据库的脚本,cronjobs,及其他运行在web应用之外的命令行任 ...
- Video Target Tracking Based on Online Learning—TLD多目标跟踪算法
TLD算法回顾 TLD(Tracking-Learning-Detection)是英国萨里大学的一个捷克籍博士生Zdenek Kalal在其攻读博士学位期间提出的一种新的单目标长时间(long ter ...
- Git服务搭建及github使用教程
.pos { position: fixed; top: 35%; left: 90% } .pos a { border: 2px solid white; background: #99CCFF; ...
- Windows 部署 Redis 群集(转)
1,下载Redis for windows 的最新版本,解压到 c:\Redis 目录下备用https://github.com/MSOpenTech/redis/releases当前我使用的是 3. ...