JUnit

@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 initTestData(){
     return Arrays.asList(
         new Object[][]{
         {3,1,2},
         {10,5,5},
         {6,4,2},
         {7,3,4}}
         );
     }
     
     public ParameterTest(int except,int input1,int input2){
     this.except = except;
     this.input1 = input1;
     this.input2 = input2;
     }
   
     @Test
     public void testAdd() {
     assertEquals(except, new Claculate().add(input1, input2));
     }
  }
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);
    }

你可能感兴趣的:(JUnit)