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 ...
随机推荐
- ERP报错:所在的期间无效,但又无法新增账套期间。
问题: 进入2018新年月,客户在新增单据的时候,报错:日期[2018-01-03]所在的期间无效 正常解决方法 过账期间里面设置一下路径:管理----期间与结账----过账期间设置 先设置年期间-- ...
- python3之模块
1.python3模块 模块是一个包含所有你定义的函数和变量的文件,其后缀名是.py.模块可以被别的程序引入,以使用该模块中的函数等功能.这也是使用 python 标准库的方法. 模块让你能够有逻辑地 ...
- 【二分图裸题】poj1325机器调度
题目大意:有两个机器A和B,A机器有n个模式,B机器有m个模式,两个机器最初在0模式 然后有k个作业,每个作业有三个参数i,a,b i代表作业编号,a和b代表第i作业要么在A机器的a模式下完成[或者] ...
- HashMap源码阅读
HashMap是Map家族中使用频度最高的一个,下文主要结合源码来讲解HashMap的工作原理. 1. 数据结构 HashMap的数据结构主要由数组+链表+红黑树(JDK1.8后新增)组成,如下图所示 ...
- ionic serve 突然报错 node-sass
正常打开项目,并开启浏览器测试模式: 执行命令: ionic serve: 结果报错: 解决方法: 你可以按照 里面的提示: 直接执行命令: npm rebuild node-sass 然后再重新执 ...
- 固定sql语句传参批量查询数据库脚本
#!/usr/bin/env python # encoding: utf-8 import pandas as pd import psycopg2 conn_dv = psycopg2.conne ...
- Zabbix实战-简易教程--正则(Regxp)
一.正则表达式(Regx) 1.概述 正则表达式概念就不解释了.请参考:https://en.wikipedia.org/wiki/Regular_expression#POSIX_extended ...
- spring官方学习地址
1.http://projects.spring.io/spring-framework/ 2.https://github.com/spring-projects/spring-mvc-showca ...
- 2017 Multi-University Training Contest - Team 9 1003&&HDU 6163 CSGO【计算几何】
CSGO Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Subm ...
- [51nod1407]与与与与
有n个整数,问从他们中取出若干个数字相与之后结果是0的有多少组. 答案比较大,输出对于 1,000,000,007 (1e9+7)取模后的结果. Input 第一行输入一个整数n.(1<=n&l ...