JUnit自动化单元测试(五):参数化测试

要成为JUnit测试高手必不可少的一项技能就是参数化测试了,现在有一个方法根据不同的参数会有不同的结果,为了测试全面如果把所有可能的情况都逐个写出来测试一遍那未免太low了,此时就可以用参数化测试,举个例子:

package junit.demo;
import static org.junit.Assert.assertEquals;
import java.util.Arrays;
import java.util.List;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;

@RunWith(Parameterized.class) //声明参数运行器
public class ParametersTest {
    private int first;
    private int second;
    /* 构造函数需要的参数会自动从参数列表中依次取出 */
    public ParametersTest(int first, int second) {
        this.first = first;
        this.second = second;
    }

    /* 这里就是参数化测试的关键了
     * 通过@Parameters修饰表示该方法是为这次测试提供参数的,默认是构造函数的参数,以集合的形式传入。
     * name属性则是一个名字,稍后解释。
     * 当然最简单的方法就像这样写就行了 */
    @Parameters(name = "{index}: parm({0},{1})")
    public static List data() {
        return Arrays.asList(new Object[][] { { 2, 6 }, { 0, 100 }, { -3, 9 } });
    }

    @Test
    public void test() {
        assertEquals(second, doSome(first));
    }

    /* 假如这个就是我们要测试的方法:
     * 如果参数大于零,则返回参数*3;
     * 如果参数等于零,则返回100;
     * 如果参数小于零,则返回参数*-3   */
    private Object doSome(int first) {
        if (first > 0) {return first * 3;}
        if (first == 0) {return 100;}
        if (first < 0) {return first * -3;}
        return null;
    }
}

OK,这样测试一下会发现三个测试成功结果
JUnit自动化单元测试(五):参数化测试_第1张图片
没错,Parameterized.class参数运行器相当于把参数列表里面的数据一次取一组进行测试,通过构造函数实例化将参数放进测试中,我的demo里有三组数据,因此会有三个测试结果。
同时细心的朋友会发现,每个测试结果的显示名字… 没错,就是代码里面提到的参数配置name属性:”{index}”表示集合下标,“{0}”表示第一个参数值,“{1}”表示第二个参数值。很好理解吧。

至此,整个JUnit已经讲解了十分之八,最重要还是在实际运用过程中根据据需要进行单元测试,可能在实际开发中很少有公司会正规的进行单元测试,不过身为一个开发者,没有任何的借口阻挡我们不断学习进取的脚步。

你可能感兴趣的:(逐本溯源,单元测试)