JUnit:对于ParameterizedMethodTest

时间:2015-12-13 08:19:22

标签: java junit

我的测试需要使用多个数据记录进行测试,而不是一次测试一次。根据我的要求找到JUnitParamsRunner并尝试了解其工作原理。以下是我的测试课程。

package test;

import static org.junit.Assert.assertEquals;

import junitparams.JUnitParamsRunner;
import java.util.Arrays;
import java.util.Collection;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import junitparams.Parameters;

@RunWith(JUnitParamsRunner.class)
public class ParameterizedMethodTest {

    @Test
    @Parameters(method = "getAddedNumbers")
    public void test(int expect,int firstVal,int secondVal) {
        assertEquals("ex: "+expect+"  act: "+firstVal,expect, multiply(firstVal,secondVal) );
    }

    public Collection<Integer[]> getAddedNumbers(){
     return $( $(1, 1, 1)// compile error under the second $ sign
             , $(21, 11, 1)// compile error under the second $ sign
     );

    }

    private int multiply(int a,int b){
        return a*b;
    }

}

这有编译错误,无法找出原因。错误:

The method $(int, int, int) is undefined for the type ParameterizedMethodTest

请告诉我此代码出错的地方?

1 个答案:

答案 0 :(得分:1)

$static method of JUnitParamsRunner

因此,为了能够使用它,就像任何静态方法一样,您需要使用

JUnitParamsRunner.$(...);

或者您需要静态导入方法才能使用它而无需预先添加类名:

import static junitparams.JUnitParamsRunner.$;

但是这种方法不会返回Integer[]Collection<Integer[]>。它返回Object[]。因此,您的方法签名必须更改为the documentation examples显示为

public Object[] getAddedNumbers()