中值函数的 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}
        });
    }