Junit4进行参数化测试

来源:互联网 发布:智能自动化 编程技术 编辑:程序博客网 时间:2024/06/05 01:10

原文来自:http://www.cnblogs.com/byron0918/p/4801152.html

  @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整理而来。

原创粉丝点击