- 测试方法上必须使用
@Test
进行修饰 - 测试方法必须使用
public void
进行修饰,不能带任何的参数 - 新建一个源代码目录来存放我们的测试代码
- 测试类的包应该和被测试类保持一致
- 测试单元中的每个方法必须可以独立测试,测试方法间不能有任何的依赖
- 测试类使用
Test
作为类名的后缀(不是必须) - 测试方法使用
test
作为方法名的前缀(不是必须)
测试用例不是用来证明你是对的,而是用来证明你没有错。
测试用例用来达到想要的预期结果,但对于逻辑错误无能为力。
- Failure
- 一般由单元测试使用的断言方法判断失败所引起的
- 表示测试点发现了问题,就是说程序输出的结果和我们预期的不一样
- Error
- 是由代码异常引起的
- 它可以产生于测试代码本身的错误
- 也可是被测试代码中的一个隐藏的 bug
@BeforeClass
- 修饰的方法会在所有方法被调用前被执行
- 而且该方法是静态的
- 所以当测试类被夹在后接着就会运行它
- 而且在内存中它只会存在一份实例
- 比较适合夹在配置文件
@AfterClass
- 所修饰的方法通常用来对资源的清理
- 如关闭数据库的连接
@Before
和@After
- 会在每个测试方法的前后各执行一次
@Test
:将一个普通的方法修饰成为一个测试方法@Test(expected=XX.class)
@Test(timeout=毫秒)
@BeforeClass
:它会在所有的方法运行前被执行,static
修饰@AfterClass
:它会在所有的方法运行结束后被执行,static
修饰@Before
:会在每一个测试方法被运行前执行一次@After
:会在每一个测试方法运行后被执行一次@Ignore
:所修饰的测试方法会被测试运行前忽略@RunWith
:可以更改测试运行器org.junit.runner.Runner
// 将测试类改为测试套件类
@RunWith(Suite.class)
// 用数组的形式将测试的类添加到测试套件中
@Suite.SuiteClasses({TaskTest1.class, TaskTest2.class, TaskTest3.class})
public ClassSuiteTest{
// 要用 public 修饰,套件测试类要为空。
// 不能有方法。
}
测试套件就是组织测试类一起运行的。
- 写一个作为测试套件的入口类,这个类里不包含其它的方法!!!
- 更改测试运行器
Suite.class
- 将要测试的类作为数组传入到
Suite.SuiteClasses({})
- 更改默认的测试运行器为
@RunWith(ParameTerized.class)
- 声明变量来存放预期值和结果值
- 声明一个返回值为
Collection
的公共静态方法,并使用@Parameters
进行修饰 - 为测试类声明一个带有参数的公共构造函数,并在其中为之声明变量赋值
@RunWith(Parameterized.class)
public class ParameterTest {
int expected = 0;
int input1 = 0;
int input2 = 0;
@Parameterized.Parameters
public static Collection<Object[]> t() {
return Arrays.asList(new Object[][]{
{3, 1, 2},
{4, 2, 2}
});
}
public ParameterTest(int expected, int input1, int input2) {
this.expected = expected;
this.input1 = input1;
this.input2 = input2;
}
@Test
public void testAdd() {
Assert.assertEquals(expected, input1 + input2);
}
}
Spring 与 Hibernate 的整合测试
- 添加 Spring,Hibernate,MySQL 等 jar 包。
- 添加 Spring 配置文件,Hibernate 配置文件。
@BeforeClass
获得 Spring 的配置文件ClassPathXmlApplicationContext("配置文件")
。- 测试通过
getBean
获得 Spring 管理的 bean 是否成功。(Hibernate、Spring+Hibernate 同理测试可得)