中值函数的 JUnit 参数化测试
JUnit parameterized test for median function
我正在尝试为一个函数编写 JUnit 测试,该函数为给定的 double
元素数组找到中位数。
但是,我正在努力传递参数。我的代码如下所示:
@RunWith(Parameterized.class)
public class MedianParameterizedTest extends TestCase {
private Double[] numbers;
private Double expectedMedian;
public MedianParameterizedTest(Double[] numbers, double expectedMedian){
this.numbers = numbers;
this.expectedMedian = expectedMedian;
}
@Parameterized.Parameters
public static Collection medianArrays() {
return Arrays.asList(new Object[][] {
{ {-5.0,-4.0,3.0}, -4.0}
});
}
@Test
public void test1() {
//doing test
}
}
但这给了我一个 illegal initializer for java.lang.Object medianArrays 集合的错误,我找不到原因。
您需要使用 new Double[]
为每个测试创建第一个(数组)参数。
您的代码中包含三层嵌套数组:
- 顶层是整个集合,每个测试用例一个元素,
- 下一层包含每个测试用例的两个参数,
- 最内层,在每个测试用例的第一个参数中,包含您希望在一个测试用例中计算中位数的所有数字。
经过new Object[][]
,Java知道需要两层嵌套数组。在 new Object[][] {
之后,它仍然知道还有一层数组需要等待,但是在 new Object[][] { {
之后,它不再需要更多层次的嵌套数组。如果此时要创建数组,则必须指定类型。
改为尝试以下操作:
@Parameterized.Parameters
public static Collection medianArrays() {
return Arrays.asList(new Object[][] {
{ new Double[] {-5.0,-4.0,3.0}, -4.0}
});
}
我正在尝试为一个函数编写 JUnit 测试,该函数为给定的 double
元素数组找到中位数。
但是,我正在努力传递参数。我的代码如下所示:
@RunWith(Parameterized.class)
public class MedianParameterizedTest extends TestCase {
private Double[] numbers;
private Double expectedMedian;
public MedianParameterizedTest(Double[] numbers, double expectedMedian){
this.numbers = numbers;
this.expectedMedian = expectedMedian;
}
@Parameterized.Parameters
public static Collection medianArrays() {
return Arrays.asList(new Object[][] {
{ {-5.0,-4.0,3.0}, -4.0}
});
}
@Test
public void test1() {
//doing test
}
}
但这给了我一个 illegal initializer for java.lang.Object medianArrays 集合的错误,我找不到原因。
您需要使用 new Double[]
为每个测试创建第一个(数组)参数。
您的代码中包含三层嵌套数组:
- 顶层是整个集合,每个测试用例一个元素,
- 下一层包含每个测试用例的两个参数,
- 最内层,在每个测试用例的第一个参数中,包含您希望在一个测试用例中计算中位数的所有数字。
经过new Object[][]
,Java知道需要两层嵌套数组。在 new Object[][] {
之后,它仍然知道还有一层数组需要等待,但是在 new Object[][] { {
之后,它不再需要更多层次的嵌套数组。如果此时要创建数组,则必须指定类型。
改为尝试以下操作:
@Parameterized.Parameters
public static Collection medianArrays() {
return Arrays.asList(new Object[][] {
{ new Double[] {-5.0,-4.0,3.0}, -4.0}
});
}