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

这篇博客介绍了如何使用JUnit进行参数化测试,通过添加@RunWith(Parameterized.class)注解和创建公共构造函数来接收测试数据。内容详细阐述了创建测试数据集合的方法,并展示了测试结果的展示方式,包括测试成功和失败的情况。最后提到了如何使用Ant运行这些测试用例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参数化测试

和创建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));
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值