JUnit

作者: 程序设计法师 | 来源:发表于2019-04-19 21:52 被阅读0次

    @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<Object[]> 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

          本文链接:https://www.haomeiwen.com/subject/daqhgqtx.html