junit单元测试

现在最新的Junit是Junit4,Junit4最大的亮点就是引入了注解(annotation),通过解析注解就可以为测试提供相应的信息,并抛弃Junit3使用命名约束的方式。

我们先从Junit3开始

对于Junit3,有一下的规定和要求

1. 测试类必须要继承于TestCase父类,必须已Test开头或结尾

2. 测试方法需要满足如下原则:

  • 测试方法是public类型
  • 测试方法无返回类型,是void的
  • 测试方法无方法参数
  • 测试方法方法名称必须以test开头

我们看个Junit3测试的例子

 1 public class CalculatorTest extends TestCase
 2 {
 3     private Calculator cal;
 4     
 5     @Override
 6     public void setUp() throws Exception
 7     {
 8         cal = new Calculator();
 9     }
10     
11     @Override
12     public void tearDown() throws Exception
13     {
14         
15     }
16     
17     public void testAdd()
18     {
19         int result = cal.add(1, 2);
20         Assert.assertEquals(3, result);
21     }
22     
23     public void testSubtract()
24     {
25         int result = cal.subtract(1, 2);
26         Assert.assertEquals(-1, result);
27     }
28 }

  对于要进行测试方法test前后操作,则对setUp(), tearDown()这两个方法进行重写。每进行一个测试用例前后,都会调用setUp(), tearDown()。对伊test case的执行次序如下:

     1  setUp()
     2  testYYY()
     3  tearDown()
     4  setUp()
     5  testXXX()
     6  tearDown()
  实际上:对于测试用例,每执行一个都会new一个新的对象。
  
  对于junit测试我们可以指定文本界面或图形界面来运行,我们需要自己写静态main方法,在main方法中通过调用下面的方法启动不同的运行器。
  1. 启动文本界面
   junit.textui.TestRunner.run(CalculatorTest.class); 

  2. 启动文本图形界面

   junit.swingui.TestRunner.run(CalculatorTest.class); 

 

  对于Junit3,当需要对多个类或者模块进行测试的时候,我们都会写好每个类的测试用例,然后写一个Suite来将它们串联起来。

 1 public class TestAll extends TestCase
 2 {
 3     public static Test suite()
 4     {
 5         TestSuite suite = new TestSuite();
 6 
 7         suite.addTestSuite(CalculatorTest.class);
 8         suite.addTestSuite(LargestTest.class);
 9         suite.addTestSuite(DeleteAllTest.class);
10 
11         suite.addTest(new RepeatedTest(new CalculatorTest("testSubtract"), 20));
12 
13         return suite;
14     }
15 }

  对于Junit3,通过RepeatedTest可以重复运行某个单个方法,但是对于该测试类,必须增加一个String参数的构造方法。

 1 public class Calculator2Test extends TestCase
 2 {
 3     public void testAdd()
 4     {
 5         try
 6         {
 7             Calculator2 cal2 = new Calculator2();
 8             Class<Calculator2> clazz = Calculator2.class;
 9             Method method = clazz.getDeclaredMethod("add", new Class[] {
10                     Integer.TYPE, Integer.TYPE });
11             method.setAccessible(true);
12             Object result = method.invoke(cal2, new Object[] { 2, 3 });
13             Assert.assertEquals(5, result);
14         }
15         catch (Exception ex)
16         {
17             Assert.fail();
18         }
19     }
20 }

 Junit3就到这,下面我们看看Junit4

  JUnit4利用Annotation简化测试用例的编写。不要求必须继承自TestCase。对于类名,方法名也不强制要求,但是实际项目中按照junit3的要求书写,这样便于测试用例的管理。

 

posted on 2014-05-15 20:15  暮风吹雪  阅读(226)  评论(0编辑  收藏  举报

导航