@Before:这个注解表示这个方法会在每个测试方法执行之前执行一次
@AfterClass:这个注解表示这个方法会在所有方法执行完毕之后执行,通常用来释放资源
@BeforeClass:这个注解表示这个方法会在所有测试方法执行之前执行,有多少个测试方法就会执行多少次
@After:这个注解表示这个方法会在每个测试方法执行之后执行一次,有多少个测试方法就会执行多少次
/**
* 测试套件类
* 测试套件是用来组织多个测试类一起运行的,使用 @RunWith注解
* 更改测试运行器为Suite.class,将要测试的类作为数组传入
* 到Suite.SuiteClasses({})中,测试套件类不能包含其他测试方法
*
* 样例如下:
*/
@RunWith(Suite.class)
@Suite.SuiteClasses({ TaskTest1.class, TaskTest2.class, TaskTest3.class })
public class SuiteTest {}
参数化测试
对于一个方法需要进行多种场景进行测试时,可以通过参数化测试减少测试的工作量。用法如下:
@RunWith(Parameterized.class)
public class ParameterTest {
/**
* 1、更改测试运行器为RunWith(Parameterized.class)
* 2、声明变量用来存放预期值与结果值
* 3、声明一个返回值为Collection的公共静态方法,并使用@Parameters进行修饰
* 4、位测试类声明一个带有参数的公共构造方法,并在其中为声明变量赋值
*/
int except; //用来存储预期结果
int input1; //用来存储第一个输入参数
int input2; //用来存储第二个输入参数
@Parameters
public static Collection
JUnit的一些注意事项:
测试方法必须使用@Test修饰
测试方法必须使用public void进行修饰,不能带参数
一般使用单元测试会新建一个test目录存放测试代码,在生产部署的时候只需要将test目录下代码删除即可
测试代码的包应该和被测试代码包结构保持一致
测试单元中的每个方法必须可以独立测试,方法间不能有任何依赖
测试类一般使用Test作为类名的后缀
测试方法使一般用test作为方法名的前缀
Failure:一般是由于测试结果和预期结果不一致引发的,表示测试的这个点发现了问题
error:是由代码异常引起的,它可以产生于测试代码本身的错误,也可以是被测试代码中隐藏的bug
一些常用的注解
@Test:将一个普通方法修饰成一个测试方法
@Test(excepted=xx.class): xx.class表示异常类,表示测试的方法抛出此异常时,认为是正常的测试通过的
@Test(timeout=毫秒数) :测试方法执行时间是否符合预期
@BeforeClass: 会在所有的方法执行前被执行,static方法
@AfterClass:会在所有的方法执行之后进行执行,static方法
@Before:会在每一个测试方法被运行前执行一次
@After:会在每一个测试方法运行后被执行一次
@Ignore:所修饰的测试方法会被测试运行器忽略
@RunWith:可以更改测试运行器org.junit.runner.Runner
Parameters:参数化注解
/**
* 测试规范点:
* 1、测试方法必须使用@Test注解,并且方法必须是public void,不能带任何参数;
* 2、测试单元中的每个方法必须可以独立,测试方法之间不能有任何的依赖;
* 3、测试方法一般使用test作为方法名的前缀
*/
@Test
public void testAdd() {
//调用所需要测试的函数
//真实值
int result=calculate.add(10, 20);
//期望值
int expect=30;
//断言
//此处 0 代表的是误差值,当expect与result相差的绝对值小于这个值时测试通过。但大于等于时会失败。
assertEquals(expect, result, 0);
}