软件测试_JUnit+Ant构建自动的单元测试(2)

来源:互联网 发布:农村淘宝召集令 编辑:程序博客网 时间:2024/05/08 17:47

参数化测试

和创建Test Case差不多,不过需要:
为测试类添加@RunWith(Parameterized.class),@RunWith 用来运行套件测试
否则Junit的默认执行无参构造方法,右键直接运行就难了:

java.lang.Exception: Test class should have exactly one public zero-argument constructor

创建一个公共的构造函数,用于接受测试数据
这里还是三角形判断方法为例,则参数abc对应三边,result为预期结果

    public TestTriangle(Integer a, Integer b, Integer c, Integer result) {        this.a = a;        this.b = b;        this.c = c;        this.result = result;    }**

创建一个公共的静态方法,带有@Parameters (或@Parameterized.Parameters),它返回一个Collection来作为测试数据集合
这里的顺序和构造方法的参数列表顺序一样,所以依次为a、b、c、result

    @Parameterized.Parameters    public static Collection primeNumbers() {        return Arrays.asList(new Object[][] {             { 3, 3, 3, 3 },             { 3, 3, 4, 2 },             { 3, 4, 5, 1 },             { 3, 4, 9, 1 },             { 3, 4, -1, -1 }        });    }

为每组测试数据创建一个实例变量,以此创建你的测试用例
所以修改测试方法如下,被测试类也可以作为测试用例的field

    /**     * Test method for {@link Triangle#judgeTrangle(int, int, int)}.     */    @Test    public void testJudgeTrangle() {        //fail("Not yet implemented"); // TODO        System.out.println("Parameterized Number is : " + a +", "+b+", "+c);        Triangle t = new Triangle();        assertEquals(this.result, t.judgeTrangle(this.a, this.b, this.c));    }

运行结果
因为{ 3, 4, 9, 1 }这一组的结果(测试为0)和预期的1不一样,所以会有Failure
参数化测试运行

试过直接在测试方法内测试所有数据,结果覆盖率较低
想不到是什么描述

Ant运行测试
测试用例的测试结果与预期相同时
ant

不相同时
这里写图片描述

附:完整代码

package test;import static org.junit.Assert.*;import java.util.Arrays;import java.util.Collection;import org.junit.After;import org.junit.AfterClass;import org.junit.Before;import org.junit.BeforeClass;import org.junit.Test;import org.junit.runner.RunWith;import org.junit.runners.Parameterized;import org.junit.runners.Parameterized.Parameters;import test.Triangle;import junit.framework.TestCase;/** *  *//**  * @author bottomheater  Email:1264276009@qq.com * @version 创建时间:2016年6月14日 下午9:06:13  * 类说明  *//** * @author Administrator * */@RunWith(Parameterized.class)public class TestTriangle{    private Integer a;    private Integer b;    private Integer c;    private Integer result;    @Parameterized.Parameters    public static Collection primeNumbers() {        return Arrays.asList(new Object[][] {             { 3, 3, 3, 3 },             { 3, 3, 4, 2 },             { 3, 4, 5, 1 },             { 3, 4, 9, 1 },             { 3, 4, -1, -1 }        });    }    public TestTriangle(Integer a, Integer b, Integer c, Integer result) {        this.a = a;        this.b = b;        this.c = c;        this.result = result;    }    /**     * Test method for {@link Triangle#judgeTrangle(int, int, int)}.     */    @Test    public void testJudgeTrangle() {        //fail("Not yet implemented"); // TODO        System.out.println("Parameterized Number is : " + a +", "+b+", "+c);        Triangle t = new Triangle();        assertEquals(this.result, t.judgeTrangle(this.a, this.b, this.c));    }}
0 0
原创粉丝点击