JUnit单元测试2—测试框架

JUnit 测试框架(JUnit 3以上版本)的主要特性如下:

  • TestCase 测试工具
  • Test Suite 测试套件
  • Test Runner 测试运行器

TestCase 测试工具

JUnit 3中,使用TestCase可确保测试方法能够在共享且固定的环境中运行,以保证测试结果的可重复性。
继承TestCase即可作为测试类,测试类中的所有public方法(除覆盖父类中的方法),都会被作为测试方法执行。

测试类可覆盖TestCase父类中的以下两个方法:

  • setUp() 在每个测试方法执行前会被自动调用(可使用JUnit 4中的@Before替代)。
  • tearDown() 在每个测试方法执行后会被自动调用(可使用JUnit 4中的@After替代)。

注意: TestCase作为JUnit 3中提供的测试工具,其功能在JUnit 4中仍然兼容。
但TestCase所有功能都可被JUnit 4提供的注解替代,而且其易用性、灵活性都不如注解。
本文只是对其进行介绍,并非推荐使用TestCase。

一个简单的TestCase使用示例:

import junit.framework.TestCase;

public class HelloTest extends TestCase {
    private int value = 0;

    public void setUp() {
        value = 1;
    }

    public void tearDown() {
        value = 0;
    }

    public void testA() {
        assertTrue(value == 1);
        value = 2;
    }

    public void testB() {
        assertTrue(value == 2);
    }
}

使用mvn test命令执行测试:

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running HelloTest
Tests run: 2, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 0.082 sec <<< FAILURE!
testB(HelloTest)  Time elapsed: 0.01 sec  <<< FAILURE!

Results :

Failed tests:   testB(HelloTest) : value was reset by setUp
Tests run: 2, Failures: 1, Errors: 0, Skipped: 0

Test Suite 测试套件

测试套件可以将多个测试类捆绑在一起按照顺序执行。
测试套件使用方式:

import org.junit.runner.RunWith;
import org.junit.runners.Suite;
import org.junit.runners.Suite.SuiteClasses;

@RunWith(Suite.class)
@SuiteClasses({HelloTest1.class, HelloTest2.class, HelloTest3.class})
public class HelloTestSuite {
    /* empty class */
}

注意:单个测试类中存在的多个测试方法时,所有测试方法都会被执行。

Test Runner 测试运行器

测试运行器用于运行测试类,并返回测试结果。

public class HelloTestRunner {
    public static void main(String[] args) {
        Result result = JUnitCore.runClasses(HelloTest.class);
        if (result.getFailureCount() > 0) {
            for (Failure failure : result.getFailures()) {
                System.out.println("Failure message:" + failure.toString());
            }
        }
        System.out.println("Test was successful:" + result.wasSuccessful());
    }
}

运行结果:

Failure message:testB(HelloTest): value was reset by setUp
Test was successful:false

上一篇:JUnit单元测试1—入门基础
下一篇:JUnit单元测试3—参数化测试

你可能感兴趣的:(JUnit单元测试2—测试框架)