zoukankan      html  css  js  c++  java
  • Junit4进行参数化测试

      @RunWith, 当类被@RunWith注解修饰,或者类继承了一个被该注解修饰的类,JUnit将会使用这个注解所指明的运行器(runner)来运行测试,而不是JUnit默认的运行器。

      
      要进行参数化测试,需要在类上面指定如下的运行器:
      @RunWith (Parameterized.class)

      然后,在提供数据的方法上加上一个@Parameters注解,这个方法必须是静态static的,并且返回一个集合Collection。


      在测试类的构造方法中为各个参数赋值,(构造方法是由JUnit调用的),最后编写测试类,它会根据参数的组数来运行测试多次。

      注意:必须要为类的所有字段赋值,不管你是不是都用到!否则,Junit会出错。

    JUnit4中参数化测试要点: 
    1. 测试类必须由Parameterized测试运行器修饰 
    2. 准备数据。数据的准备需要在一个方法中进行,该方法需要满足一定的要求: 
        1)该方法必须由Parameters注解修饰 
        2)该方法必须为public static的 
        3)该方法必须返回Collection类型 
        4)该方法的名字不做要求 
        5)该方法没有参数


    public class Add {
      public int add(int input1, int input2) {
        return input1 + input2;
      }
    }

    package org.test;  
      
    import java.util.Arrays;  
    import java.util.Collection;  
      
    import org.junit.Assert;  
    import org.junit.Test;  
    import org.junit.runner.RunWith;  
    import org.junit.runners.Parameterized;  
    import org.junit.runners.Parameterized.Parameters;  
    /** 
     * 参数化测试的类必须有Parameterized测试运行器修饰 
     * 
     */  
    @RunWith(Parameterized.class)  
    public class AddTest3 {  
      
        private int input1;  
        private int input2;  
        private int expected;  
          
        /** 
         * 准备数据。数据的准备需要在一个方法中进行,该方法需要满足一定的要求: 
     
             1)该方法必须由Parameters注解修饰 
             2)该方法必须为public static的 
             3)该方法必须返回Collection类型 
             4)该方法的名字不做要求 
             5)该方法没有参数 
         * @return 
         */  
        @Parameters  
        @SuppressWarnings("unchecked")  
        public static Collection prepareData(){  
            Object [][] bject = {{-1,-2,-3},{0,2,2},{-1,1,0},{1,2,3}};  
            return Arrays.asList(object);  
        }  
          
        public AddTest3(int input1,int input2,int expected){  
            this.input1 = input1;  
            this.input2 = input2;  
            this.expected = expected;  
        }  
        @Test  
        public void testAdd(){  
            Add add = new Add();  
            int result = add.add(input1, input2);  
            Assert.assertEquals(expected,result);  
        }  
          
    }

    注:在测试的时候,例如我,在测试函数的时候,单独测试一个方法,而不是将一个类中的所有的方法进行测试,而在参数化测试过程中,使用上面的测试方法,一直不能通过,到后来没有办法了,运行了整个测试类,代码通过了,回头一想也也确实这么回事,这个参数化方法测试函数需要上面的参数,而单独运行一个函数的话就无法获取上面的变量。所有在测试参数化测试用例的时候,要运行整个测试类。

    本文根据http://www.cnblogs.com/mengdd/archive/2013/04/13/3019336.html和http://www.51testing.com/html/88/377588-817359.html整理而来。

      

  • 相关阅读:
    linux就该这么学.pdf
    linux中shell编辑小技巧
    相关功能分享
    现代操作系统第三版高清.pdf中文版免费下载
    linux高性能服务器编程pdf免费下载
    git每次更新都需要输入账号密码,如何解决?
    Python 面向对象
    模块和包
    Python常用模块(collections、 time、 random、 os 、sys、序列化模块)
    内置函数和匿名函数(lambda)
  • 原文地址:https://www.cnblogs.com/byron0918/p/4801152.html
Copyright © 2011-2022 走看看