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 ...
随机推荐
- Ubuntu Bash and Dash
http://blog.sina.cn/dpool/blog/s/blog_5f16b0590100r1ub.html?vt=4
- WPF获取窗口句柄的方法
通过WPF的互操作帮助类WindowInteropHelper,相关连接:https://msdn.microsoft.com/zh-cn/library/system.windows.interop ...
- 【转载】在Linux下,一个文件也有三种时间,分别是:访问时间、修改时间、状态改动时间
在windows下,一个文件有:创建时间.修改时间.访问时间.而在Linux下,一个文件也有三种时间,分别是:访问时间.修改时间.状态改动时间. 两者有此不同,在Linux下没有创建时间的概念,也就是 ...
- 6.while loop
while 循环 有时候我们不确定需要循环几次.就像一个司机不知道自己需要什么时候加油一样.程序可以这样写: while petrol_filling: increase price show ...
- mongodb 创建用户
1.创建管理员 2.授权认证 3.给使用的数据库添加用户 普通连接(非授权连接)数据库 mongod -f /usr/local/etc/mongod.conf 授权连接数据库 mongod -f / ...
- Code Review 程序员的寄望与哀伤【转载】
一个程序员,他写完了代码,在测试环境通过了测试,然后他把它发布到了线上生产环境,但很快就发现在生产环境上出了问题,有潜在的 bug. 事后分析,是生产环境的一些微妙差异,使得这种 bug 场景在线下测 ...
- time模块、装饰器、类的装饰器
python time模块 导入模块: import time #time模块是python中最基本的模块之一 输出时间戳:time.time() #可以用变量接收,要打印出来要用print(),如 ...
- web安全与防御
xss攻击(跨站脚本) 是网站应用程序的安全泄露攻击,是代码注入的一种.它允许恶意用户将代码注入到网页上,其他用户在观看网页时就会受到影响. 攻击原理 其特点是不对服务器端造成任何伤害,而是通过一些正 ...
- iOS 字符串 MD5
iOS 字符串 MD5 Objective-C 实现 需要引入头文件 #import <CommonCrypto/CommonCrypto.h> 这里用方法实现 + (nullable N ...
- AdaBoostRegressor
class sklearn.ensemble.AdaBoostRegressor(base_estimator=None, n_estimators=50, learning_rate=1.0, lo ...