Junit4 参数化测试 判断三角形的例子

2011-11-21  赵云峰 

本人正在学习单元测试,在使用Juni4参数化测试的时候遇到一些问题。主要问题是,如何做对象的参数化,网上关于Junit4参数化的例子基本都是算术题,太easy,在真正实战中我想肯定要复杂的多,对于我们初学者来讲,尤其是俺们自学的同学,复杂的参数怎么做,几乎没有指引啊。经过一点努力,小可终于发掘出了点名堂,现在写来于大家分享一下,如有不当之处,请大家一起修正,欢迎讨论共进步啊。
废话不多说了,实战如下!
待测试类,三角形Triangle类,不细写了,类中主要为判断是否为三角形和判断什么样的三角形两个方法如下:
  1. package main.java;
  2. public class Triangle {
      protected long SideA=0;
      protected long SideB=0;
      protected long SideC=0;
     public Triangle(long A,long B, long C){//构造函数
      this.SideA=A;
      this.SideB=B;
      this.SideC=C;
     }
    public boolean isTriangle(Triangle triangle){//判断是否为三角形
    boolean istrue=false;
    ...
    return istrue;
    }  
  3. public String isType(Triangle triangle){//判断三角形的类型
    String strtype="";
    ...
    return strtype;
    }
测试类如下:
  1. package test.cc;
  2. import static org.junit.Assert.assertEquals;
  3. import java.util.Arrays;  
  4. import java.util.Collection;    
  5. import org.junit.Assert;  
  6. import org.junit.Test;  
  7. import org.junit.runner.RunWith;  
  8. import org.junit.runners.Parameterized;  
  9. import org.junit.runners.Parameterized.Parameters;  
  10. import main.java.Triangle;
  11. /** 
  12.  * 参数化测试的类必须有Parameterized测试运行器修饰 
  13.  * 
  14.  */ 
  15. @RunWith(Parameterized.class)
  16. public class TriangleTest {
  17. private long param1;
  18. private long param2;
  19. private long param3;
  20. private boolean expected=false;
  21. private String exp_type="";
  22. /** 
  23.      * 准备数据。数据的准备需要在一个方法中进行,该方法需要满足一定的要求: 
  24.  
  25.          1)该方法必须由Parameters注解修饰 
  26.          2)该方法必须为public static的 
  27.          3)该方法必须返回Collection类型 
  28.          4)该方法的名字不做要求 
  29.          5)该方法没有参数 
  30.      * @return 
  31.      */  
  32.  @Parameters
  33.  @SuppressWarnings("unchecked")  
  34.  public static Collection date(){ 
  35.  //将所有测试数据放在object数组对象中 
  36.  //object数组对象可使用任意数据类型
  37. //实际测试时 自己加入更多的测试数据
  38. Object[][] object={{3,4,5,true,"scalene triangle"},
  39. {-3,-4,-5,false,"not a triangle"},
  40. {2,3,5,false,"not a triangle"},
  41. {3,3,3,true,"equilateral triangle"},
  42. {5,3,3,true,"isosceles triangle"}}
  43. return Arrays.asList(object);
  44.  }
  45.   /*此构造函数不可缺少,并且参数要和参数结合中的类型及数量一致*/
  46.  public TriangleTest(long param1,long  param2,long param3,boolean expected,String type){
  47. this.param1=param1;
  48. this.param2=param2;
  49. this.param3=param3;
  50. this.expected=expected;
  51. this.exp_type=type;
  52.  }
  53.  @Test
  54.  public void testistriangle(){
  55.  //生成对象时,直接将结合中的参数传入即可
  56.   Triangle triangle=new Triangle(param1,param2,param3);
  57. boolean result=triangle.isTriangle(triangle);
  58. assertEquals(expected,result);
  59.  }
  60.  @Test
  61.  public void testistype(){
  62. Triangle triangle=new Triangle(param1,param2,param3);
  63. String result_type=triangle.isType(triangle);
  64. assertEquals(exp_type,result_type);
  65.  }
  66. }
运行结果通过,如下图:(实际测试时可以加入更多的测试数据)

1075°/10708 人阅读/5 条评论 发表评论

付民  2011-11-21

顶....


熊志男  2011-11-21

很整齐啊


赵云峰  2011-11-22

付民: 顶....
tks


赵云峰  2011-11-22

熊志男: 很整齐啊
为了整齐,费了不少功夫。。。哈哈


小窝  2011-12-15

已同步至官方微博


登录 后发表评论