• content
    {:toc}

测试框架学习。

测试

基本概念

被测系统 SUT (System Under Test)

表示正在测试的系统,目的是测试系统能否正确操作。

  • Dummy Object

    泛指在测试中必须传入的对象。

  • Test Stub

    测试桩,用来接收SUT内部的间接输入,并返回特定的值给SUT。

  • Test Spy

    像一个间谍,安插在SUT内部,负责将SUT的间接输出传到外部。

  • Mock Object

    和Spy类似,且Mock还负责对输出进行验证。

  • Fake Object

测试夹具 Test Fixture

即 测试运行程序,会在运行目标测试方法之前自动初始化、资源回收的工作。

测试用例 Test Case

测试套件 Test Suite

如果每次只能运行一个测试用例,则和传统的使用main()方法进行测试没有区别。手工去一个个执行测试用例,非常繁琐低效。测试套件,即将多个测试用例组装成一个测试套件,测试套件批量运行测试用例。

断言 Assertions

JUnit 4

各个方法之间相互独立 ,一个方法的失败不会导致别的方法失败,方法之间不存在相互依赖的关系,彼此独立。

生命周期

类级初始化资源处理、【方法级初始化资源处理、执行测试用例中的方法、方法级销毁资源处理】、类级销毁资源处理。

类级别的初始化和销毁,一个测试用例类中只执行一次。

方法级别初始化和销毁,执行测试用例中每个测试方法中都会执行一次,以防止测试方法相互间的影响。

测试类中,支持有多个初始化或销毁方法。执行顺序是:多个初始化方法,由后向前。多个销毁方法,由前向后。

使用 JUnit 4

1
2
3
4
5
6
maven:
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>

测试方法

@Test标注。

@BeforeClass

@Before

@Test

@After

@AfterClass

@Test(expected=NullPointerException.class)

超时测试

@Test(timeout=10)

参数化测试

@RunWith(Parameterized.class)

测试运行器

通过@RunWith(Xxx.class)指定

所有测试方法都由测试运行器负责执行,且JUnit默认使用BlockJUnit4ClassRunner,且可以自己定制运行器。 一般情况下默认的足够,但当使用一些高级特性时,如 从参数化测试、套件测试时,需要显示指定所用的运行器。 通过@RunWith(Xxx.class)指定。

测试套件

@RunWith(Suite.class)

1
2
3
4
5
6
7
8
9
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
import org.junit.runners.Suite.SuiteClasses;

@RunWith(Suite.class)
@SuiteClasses(PersonTest.class,Xxx.class,Xxxx.class)
public class Junit4SuiteTest {

}

Junit 4 断言

模拟利器 Mockito