参数化测试运行器

来源:互联网 发布:mac小技巧 编辑:程序博客网 时间:2024/05/22 14:50


说说使用参数化测试运行器的优缺点

 

要进行参数化测试,需要在类上面指定如下的运行器:

  @RunWith (Parameterized.class)

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

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

缺点:JUnit目前的参数化测试只支持一个@Parameters,要是支持多个就可以匹配多个构造函数,可以实现更多的用例。

 


TestDate1.java

import static org.junit.Assert.*;import java.util.Arrays;import java.util.Collection;import org.junit.Test;import org.junit.runner.RunWith;import org.junit.runners.Parameterized;import org.junit.runners.Parameterized.Parameters; @RunWith(value=Parameterized.class)public class TestDate1 {private int expected;//0表示假,1表示真private int valueYear;private int valueMoon;private int valueDay; public TestDate1(int e,int vy,int vm,int vd){this.expected = e;this.valueYear = vy;this.valueMoon = vm;this.valueDay = vd;}@Parameterspublic static Collection<Integer[]> getTestParameters() {return Arrays.asList(new Integer[][] {{31, 2000, 1, 1},{31, 2000, 3, 1},{31, 2000, 5, 1},{31, 2000, 7, 1},{31, 2000, 8, 1},{31, 2000, 10, 1},{31, 2000, 12, 1},{30, 2001, 4, 1},{30, 2001, 6, 1},{30, 2001, 9, 1},{30, 2001, 11, 1},{28, 2001, 2, 1},{29, 2012, 2, 1},{0, 2012, 13, 1}});}@Testpublic void testgetNumberOfDaysInMonth(){Date d =new Date(valueYear,valueMoon,valueDay);assertEquals(expected, d.getNumberOfDaysInMonth());}}


TestDate2.java

import static org.junit.Assert.*;import java.util.Arrays;import java.util.Collection;import org.junit.Test;import org.junit.runner.RunWith;import org.junit.runners.Parameterized;import org.junit.runners.Parameterized.Parameters; @RunWith(value=Parameterized.class)public class TestDate2 {private int expected;//0表示假,1表示真private int valueYear;private int valueMoon;private int valueDay;public TestDate2(int e,int vy,int vm,int vd){this.expected = e;this.valueYear = vy;this.valueMoon = vm;this.valueDay = vd;} @Parameterspublic static Collection<Integer[]> getTestParameters() {return Arrays.asList(new Integer[][] {{1, 2000, 1, 1},{0, 2001, 1, 1},{1, 2012, 1, 1},{0, 1800, 1, 1}});}@Testpublic void testisLeapYear(){Date d =new Date(valueYear,valueMoon,valueDay);boolean e;//把0,1转换为boolean值if(expected == 0)e=false;elsee=true;assertEquals(e, d.isLeapYear());} }



TestSuite.java

import org.junit.runner.RunWith;import org.junit.runners.Suite; @RunWith(Suite.class)// 指定运行器@Suite.SuiteClasses({ TestDate1.class, TestDate2.class })// 指定要测试的类public class TestSuite {} 

0 0
原创粉丝点击