您的位置:软件测试 > 开源软件测试 > 开源单元测试工具 > junit
了解JUnit核心类、接口及生命周期
作者:网络转载 发布时间:[ 2013/8/29 15:25:33 ] 推荐标签:

Junit 从问世至今已有 12 年的历史,期间功能不断完善,用户逐渐扩大,已经成为 Java 软件开发中应用为广泛的测试框架。本文着重介绍 JUnit 的核心接口、核心类以及 TestCase 的生命周期,以便读者从架构层面掌握这个工具。

1997 年,Erich Gamma 和 Kent Beck 为 Java 语言创建了一个简单但有效的单元测试框架,称作 JUnit。JUnit 很快成为 Java 中开发单元测试的框架标准。世界上无数软件项目使用它。本文将介绍 JUnit 的核心接口,核心类以及 JUnit 的生命周期。

JUnit 核心接口及核心类

了解 JUnit 的生命周期之前,先了解 JUnit 的核心接口和类是有必要的,这对于了解 TestCase 的生命周期有很大的帮助。

    Test:是 TestCase、TestSuite 的共同接口。run(TestResult result) 用来运行 Test,并且将结果保存到 TestResult。

    TestCase:Test 的接口的抽象实现,是 Abstract 类,所以不能实例化,能被继承。其中一个构造函数 TestCase(String name),根据输入的参数,创建一个测试实例。参数为该类的以 test 开头的方法名,把它添加到 TestSuite 中,指定仅仅运行 TestCase 中的一个方法。

    TestSuite:实现 Test 接口。可以组装一个或者多个 TestCase。待测试类中可能包括了对被测类的多个 TestCase,而 TestSuit 可以保存多个 TestCase,负责收集这些测试,这样可以一个 Suite 能运行对被测类的多个测试。

    TestResult:保存 TestCase 运行中的事件。TestResult 有 List<TestFailure> fFailures 和 List<TestFailure> fErrors。fFailures 记录 Test 运行中的 AssertionFailedError,而 fErrors 则记录 Exception。Failure 是当期望值和断言不匹配的时候抛出的异常,而 Error 则是不曾预料到的异常,如:ArrayIndexOutOfBoundsException。

    TestListener:是个接口,对事件监听,可供 TestRunner 类使用。

    ResultPrinter:实现 TestListener 接口。在 TestCase 运行过程中,对所监听的对象的事件以一定格式及时输出,运行完后,对 TestResult 对象进行分析,输出的统计结果。

    BaseTestRunner:所有 TestRunner 的超类。

    java Junit.swingui.TestRunner:实现 BaseTestRunner,提供图形界面。从 4.0 版本起,没有再提供这个类。这是 4.0 版本和之前版本的显著变化之一。

    java Junit.textui.TestRunner:实现 BaseTestRunner,提供文本界面。下面将以它做为例子讲解 JUnit 生命周期。

TestCase 实例

了解了前面的几个类,下面将看一个例子:

Java代码

    public class TestShoppingCart extends TestCase {  
        double unitPrice = 5;  
        int quantity = 6;  
        double discount=0.2;  
     
        @Before  
        public void setUp() throws Exception {  
            System.out.println(" Up ");  
        }  
     
        @After  
        public void tearDown() throws Exception {  
            System.out.println(" Down ");  
        }  
         
        public void testPay() {  
            double total = unitPrice * quantity;  
            assertEquals(30, total);  
        }  
         
        public void testPayWithDiscount() {  
            double total = unitPrice * quantity*(1-discount);  
            assertEquals(24.0, total);  
        } 
    } 

上一页1234下一页
软件测试工具 | 联系我们 | 投诉建议 | 诚聘英才 | 申请使用列表 | 网站地图
沪ICP备07036474 2003-2017 版权所有 上海泽众软件科技有限公司 Shanghai ZeZhong Software Co.,Ltd