您的位置:首页 > 编程语言 > Java开发

关于java的测试工具junit的使用的介绍

2014-04-18 14:57 513 查看

关于java的测试工具junit的使用的介绍

junit是一个单元测试的工具,在java编码过程中会有很大的帮助,一般不会junit的编程人员会喜欢把程序编好之后通过往输出窗口打印想要获得的数据来进行对自己程序的测试工作,这就有一个弊端就是,程序必须是完整的整体,而不能是某一个模块的单独的测试,因此junit就发挥了很好的作用。

首先说一下junit怎么运用,要想使用junit那就必须引入junit包来实现,junit包可以通过网上下载,百度能够找到很多相应的包,怎么引入包呢? 跟引入普通的包的步骤一样,在eclipse工程文件中点击右键,选中build path,然后选择add library,选择对应junit版本就行。

junit的程序代码是怎样的一种形式呢?junit代码有什么限制条件吗?在这里就给出说明。

要想调用junit进行测试工作那么测试的类必须继承TestCase这个类,并且需要重写其中的方法setUp(),tearDown(),当然不是每个测试类都是要重写这两个方法的,这两个方法是什么时候调用的呢,setUp是在一个测试方法之前调用,可以在这个方法中进行初始化的工作,tearDown也就很容易理解了,是对应于setUp的,是在方法结束之后调用的,可以在这里进行结束操作,如释放空间,删除所定义的文件目录等等,这两个方法有点像android的oncreate和ondestroy,这里就要说每个方法都是有怎样的定义规则呢,这里有四种必须遵守的条件。1.方法必须是public的,2.方法名称中必须带有test,3.方法必须是void的,4.方法是没有参数的。好那么下面就给出一段代码说明一下。

public class Calculator {
public int add(int a, int b) {
return a + b;
}

public int minus(int a, int b) {
return a - b;
}

public int multiply(int a, int b) {
return a * b;
}

public int divide(int a, int b) throws Exception {
if (0 == b) {
throw new Exception("除数不能为零");
}
return a / b;
}
}

上面定义了一个Calculator的类,里面有4种方法,这个类可以认为是你要进行单元测试的类。

import junit.framework.Assert;
import junit.framework.TestCase;

public class CalculatorTest extends TestCase {

private Calculator cal;

protected void setUp() throws Exception {
cal = new Calculator();
}

protected void tearDown() throws Exception {
super.tearDown();
}

public void testAdd() {
int result = cal.add(1, 2);
Assert.assertEquals(3, result);
}

public void testMinus() {
int result = cal.minus(5, 2);
Assert.assertEquals(3, result);
}

public void testMultiply() {
int result = cal.multiply(4, 2);
Assert.assertEquals(8,result);
}

public void testDivide() {
int result = 0;
try {
result = cal.divide(10, 5);
} catch (Exception e) {
e.printStackTrace();
// 我们期望result = cal.divide(10,5);正常执行;如果进入到catch中说明失败;
// 所以我们加上fail。
Assert.fail();// 如果这行没有执行。说明这部分正确。
}
Assert.assertEquals(2, result);
}

}

上面的代码就是junit测试的具体代码形式了,从上面的代码中可以看出都遵守上面所说的4中条件,测试类的类名一般是你的类加上test来进行命名,当然也可以有其他的形式,根据你的需求进行命名,就像上面所说的setup方法中可以进行初始化,在该方法中先实例化了我们需要测试的类,然后在每个测试方法中调用实例化对象的方法来进行测试的工作,比如上面的testAdd中就调用了Calculator类的add方法。那怎么来执行这个测试的程序的呢,在eclipse中右键点击方法名,然后在run as中选择junit test就可以执行测试的工作了,怎么来判断测试的对与否呢,那就要说明一下了,测试结果一般会有两种错误的提示情况。

Error:执行断言之前就已经发生的异常,是由于程序本身的的错误,导致运行的异常,而非由于断言的错误。

Failure:执行断言异常,实际运行与预期运行结果不同导致,应该是由于测试程序运行中出现的错误。

上面提到了断言这个词,断言是什么呢,Assert 这个就是断言,我们可以断言这个测试程序的结果,如果结果与我们所断言的一样那么测试成功,如果与我们断言的不同,那么测试就失败了,也就是你的程序还需要进行修改。断言这个类中有很多方法,比如说assertEquals比较两个对象是否相同,assertNotNull返回结果是否为空等等,可以查阅文档来进行了解。

如果需要测试的方法很多,那么要是一个一个进行run as显然工作量比较大,而且也繁琐,那么junit也给我们提供了一种方法。TestSuite。下面给出一段代码进行说明一下。

import junit.extensions.RepeatedTest;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;

public class TestAll extends TestCase {
public static Test suite(){//这里是有固定的写法的,public static Test的,方法名为suite
TestSuite suite=new TestSuite();
suite.addTestSuite(CalculatorTest.class);

suite.addTest(new RepeatedTest(new CalculatorTest("testAdd"),5));//RepeatedTest:重复测试,让哪个方法重复执行多少次,在这里让CaculatorTest这个测试类中的substract方法重复执行5次

return suite;
}
}

上面的代码已经进行了详细的注释,如上所说 public static Test suite()这个是固定不变,也必须是这样进行。首先实例化一个TestSuite对象,然后在里面add你的测试类,如上就把所有的测试方法都加进去了,最后你在像测试你的测试类一样进行单元测试就能得到对应的结果,上面还提到了一个方法就是重复测试,重复测试一个方法,这个方法调用的时候必须满足你的测试类中有带有字符串参数的构造函数,要不然会报错的。

上面只是介绍了junit3版本的使用方式,但是现在已经有junit4版本了,有了很多改进,也让我们能够更方便的进行调用了,特别是引入了@Annotation的概念使junit得使用更加的得心应手了。对于junit4的讲解下面给出一篇讲解的很详细的文章,可以进行参考。

http://www.cnblogs.com/eggbucket/archive/2012/02/02/2335697.html



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息