我正在尝试使用 Eclipse IDE 来测试 JUnitParamsRunner,但不知何故无法解析 JUnitParamsRunner。我目前正在使用 JDK 21 和 JUnit 5。
@Parameters
无法解析为类型,同样适用于 @RunWith(JUnitParamsRunner.class)
这是我的 JUnit 测试代码
package application;
import junitparams.JUnitParamsRunner;
import junitparams.Parameters;
import static junitparams.JUnitParamsRunner.$;
import org.junit.Test;
import org.junit.runner.RunWith;
import static org.junit.Assert.assertEquals;
@RunWith(JUnitParamsRunner.class)
public class BasicParameterizedDemo {
@Test
public void testAddTwoNumbersV1() {
VariousMethodsClass vmc = new VariousMethodsClass();
int result = vmc.addTwoNumbers(10, 15);
assertEquals(25, result);
}
@Test
public void testAddTwoNumbersV2() {
VariousMethodsClass vmc = new VariousMethodsClass();
int result = vmc.addTwoNumbers(-50, 10);
assertEquals(-40, result);
}
@Test
public void testAddTwoNumbersV3() {
VariousMethodsClass vmc = new VariousMethodsClass();
int result = vmc.addTwoNumbers(30, 100);
assertEquals(130, result);
}
@Test
@Parameters({"10, 15, 25","-50, 10, -40","30, 100, 130"})
public void paramTestAddTwoNumbersV1(int num1, int num2, int expectedSum) {
VariousMethodsClass vmc = new VariousMethodsClass();
int result = vmc.addTwoNumbers(num1, num2);
assertEquals(expectedSum, result);
}
private Object[] getNumbersToAdd() {
return new Object[] {
new Object[] {10, 15, 25},
new Object[] {-50, 10, -40},
new Object[] {30, 100, 130}
};
}
@Test
@Parameters(method = "getNumbersToAdd")
public void paramTestAddTwoNumbersV2(int num1, int num2, int expectedSum) {
VariousMethodsClass vmc = new VariousMethodsClass();
int result = vmc.addTwoNumbers(num1, num2);
assertEquals(expectedSum, result);
}
@Test
@Parameters
public void paramTestV3(int num1, int num2, int expectedSum){
VariousMethodsClass vmc = new VariousMethodsClass();
assertEquals(expectedSum,vmc.addTwoNumbers(num1, num2));
}
private Object[] parametersForParamTestV3(){
return new Object[] {
new Object[] {10, 15, 25},
new Object[] {-50, 10, -40},
new Object[] {30, 100, 130}
};
}
@Test
@Parameters(method = "getNumbersToAdd_V2")
public void paramTestV4(int num1, int num2, int expectedSum){
VariousMethodsClass vmc = new VariousMethodsClass();
assertEquals(expectedSum, vmc.addTwoNumbers(num1, num2));
}
private Object[] getNumbersToAdd_V2(){
return $(
$(10, 15, 25),
$(-50, 10, -40),
$(30, 100, 130)
);
}
}```
您的导入(
org.junit.Test
和 org.junit.runner.RunWith
)来自 JUnit 4 (https://github.com/junit-team/junit4/wiki/Getting-started),并且 JUnit 4 本身不支持参数化测试。对于 JUnit 4,有一个单独的包 JUnitParams,您没有将其导入到项目中。
如果您想使用 JUnit 5,您需要首先导入正确的
Test
注释 (https://junit.org/junit5/docs/current/user-guide/#writing-tests):
import org.junit.jupiter.api.Test;
并且您需要更改参数化测试以使用本机 JUnit 5 参数化测试支持(https://junit.org/junit5/docs/current/user-guide/#writing-tests-parameterized-tests):
import org.junit.jupiter.params.ParameterizedTest
@ParameterizedTest
@CsvSource({"10, 15, 25","-50, 10, -40","30, 100, 130"})
public void paramTestAddTwoNumbersV1(int num1, int num2, int expectedSum) {
VariousMethodsClass vmc = new VariousMethodsClass();
int result = vmc.addTwoNumbers(num1, num2);
assertEquals(expectedSum, result);
}
private Object[] getNumbersToAdd() {
return new Object[] {
new Object[] {10, 15, 25},
new Object[] {-50, 10, -40},
new Object[] {30, 100, 130}
};
}
@ParameterizedTest
@MethodSource("getNumbersToAdd")
public void paramTestAddTwoNumbersV2(int num1, int num2, int expectedSum) {
VariousMethodsClass vmc = new VariousMethodsClass();
int result = vmc.addTwoNumbers(num1, num2);
assertEquals(expectedSum, result);
}
@ParameterizedTest
@MethodSource
public void paramTestV3(int num1, int num2, int expectedSum){
VariousMethodsClass vmc = new VariousMethodsClass();
assertEquals(expectedSum,vmc.addTwoNumbers(num1, num2));
}
private Object[] parametersForParamTestV3(){
return new Object[] {
new Object[] {10, 15, 25},
new Object[] {-50, 10, -40},
new Object[] {30, 100, 130}
};
}
我省略了最后一个示例,因为 JUnit 5 不支持
$()
来写入数组。