junit入门01

来源:互联网 发布:java简单加法计算器 编辑:程序博客网 时间:2024/05/16 00:55

记得在几乎每本语言教学书上都能找到HelloWorld这个入门代码。今天在这里,我们也从一个简单到根本不用单元测试的例子入手。这是一个只会做两数加减的超级简单的计算器(小学一年级必备极品)。例:Calculator.java

  1. public class Calculator {
  2.     public int add(int augend , int addend){
  3.         return augend + addend ;
  4.     }      
  5.     public int subtration(int minuend , int subtrahend){      
  6.         return minuend - subtrahend ;
  7.     }
  8. }

将上面的代码编译通过。下面就是我为上面程序写的一个单元测试用例:TestCalculator.java

//请注意这个程序里面类名和方法名的特征

  1. public class TestCalculator extends TestCase {
  2.     public void testAdd() {
  3.         Calculator cal = new Calculator();
  4.         int result = cal.add(1020);
  5.         assertEquals(30, result);
  6.     }
  7. }

然后在eclipse中运行(eclipse确实很强大,已经内嵌了junit)。运行结果:绿色说明单元测试通过,没有错误产生;如果是红色的,则就是说测试失败了。这样一个简单的单元测试就完成了,是不是很容易啊?

另外你是否注意到,上面弹出窗口的一个细节,在绿条下面有ErrorsFailures统计。这两者有何区别呢?

Failures作为单元测试所期望发生的错误,它预示你的代码有bug,不过也可能是你的单元测试代码有逻辑错误(注意是逻辑错误)。

Errors不是你所期待的,发生了Error你可以按照下面的顺序来检查:(1)检查测试所需的环境,如:数据库连接; (2)检查单元测试代码; (3)检查你的系统代码.

按照框架规定:

(1)编写的所有测试类,必须继承自junit.framework.TestCase类;

(2)里面的测试方法,命名应该以Test开头,必须是public void而且不能有参数;

(3)为了测试查错方便,尽量一个TestXXX方法对一个功能单一的方法进行测试;

(4)使用assertEqualsjunit.framework.TestCase中的断言方法来判断测试结果正确与否。

你可以对比着上面测试类中的实现来体会下规定——很简单!而且你在这个测试类中有加入多少个测试方法,就会运行多少个测试方法。

你在看上面的代码的时候,是不是注意到每个TestXXX方法中都有一条SampleCalculator初始化语句?这很明显不符合编码规范。你可能正要将它提取出来放到构造函数里面去。且慢!在JUnit中的初始化是建议在Setup方法中作的。JUnit提供了一对方法,一个在运行测试方法前初始化一些必备条件而另一个就是测试完毕后去掉初始化的条件。

setUp与tearDown,这两个函数是junit framework中提供初始化和反初始化每个测试方法的。setUp在每个测试方法调用前被调用,负责初始化测试方法所需要的测试环境;tearDown在每个测试方法被调用之后被调用,负责撤销测试环境。它们与测试方法的关系可以描述如下:

测试开始 -> setUp -> testXXXX -> tearDown ->测试结束

  1. public class TestSample extends TestCaset{
  2.     protected void setUp(){
  3.         //初始化……
  4.     }
  5.     public void testMethod1(){
  6.         assertTrue( true);
  7.     }
  8.     potected void tearDown(){
  9.         //撤销初始化……
  10.     }
  11. }

成批运行test case

方便于系统单元测试的成批运行。使用起来也是非常简单,先看下使用代码:

  1. public class TestAll {
  2.     public static Test suite() {
  3.         TestSuite testSuite = new TestSuite("TestSuite Test");
  4.         testSuite.addTestSuite(TestCalculator.class);
  5.         return testSuite;
  6.     }
  7. }

这个测试程序的编译、运行,和上面TestSample的方式是一样的。怎么样?这样你在suite方法里面添加几个TestCase就会运行几个,而且它也可以添加TestSuite来将小一点的集合加入大的集合中来,方便了对于不断增加的TestCase的管理和维护

呵呵,你觉得suite方法的作用是不是于java应用程序的main很类似?并且这里的suite必须严格遵守上面的写法!

原创粉丝点击