我的测试需要使用多个数据记录进行测试,而不是一次测试一次。根据我的要求找到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
请告诉我此代码出错的地方?
答案 0 :(得分:1)
$
是static method of JUnitParamsRunner。
因此,为了能够使用它,就像任何静态方法一样,您需要使用
JUnitParamsRunner.$(...);
或者您需要静态导入方法才能使用它而无需预先添加类名:
import static junitparams.JUnitParamsRunner.$;
但是这种方法不会返回Integer[]
或Collection<Integer[]>
。它返回Object[]
。因此,您的方法签名必须更改为the documentation examples显示为
public Object[] getAddedNumbers()