繁体   English   中英

为什么此JUnitTest失败?

[英]Why does this JUnitTest fail?

    @Test
public void testAscendingNumbers() {
    Object[][] testData = new Object[][]{
        {new int[]{1, 2, 3, 4, 5}, 4, 30},
        {new int[]{1, 2, 2, 2, 2}, 4, 0},
        {new int[]{1, 1, 1, 4, 3}, 5, 0},
        {new int[]{1, 2, 4, 3, 1}, 4, 30},
        {new int[]{2, 3, 4, 6, 1}, 5, 0},
        {new int[]{1, 2, 6, 4, 5}, 4, 0},
        {new int[]{5, 4, 3, 2, 1}, 4, 30},
        {new int[]{6, 5, 3, 4, 2}, 5, 40},
        {new int[]{2, 2, 3, 4, 4}, 4, 30},
        {new int[]{2, 6, 3, 5, 3}, 4, 40}
    };

    KniffelTableModel instance = new KniffelTableModel();
    for (Object[] obj : testData) {
        System.out.println((int) obj[1]);
        System.out.println("ascendingNumbers - " + obj[1] + " in " + Arrays.toString((int[]) obj[0]));
        System.out.println("Expect: " + obj[2] + " --> got: " + instance.ascendingNumbers((int[]) obj[0], (int) obj[1]));
        assertEquals((int) obj[2], instance.ascendingNumbers((int[]) obj[0], (int) obj[1]));
    }
}

出于测试目的,我在这里没有使用泛化测试,但是它仍然可以工作...问题是,我期望的结果与我正在测试的函数的结果相同,但是它仍然说不是同样...我知道它必须是正确的,因为在“期望”行中,我得到2个相等的值... 在此处输入图片说明

KniffelTableModel实例可能有状态的 ,并且KniffelTableModel.ascendingNumbers()对于具有相同参数的后续调用不会产生相同的结果。

或者它可能会修改输入数组。

您可以重写测试,以便每个用例仅调用一次KniffelTableModel.ascendingNumbers() ,即:

KniffelTableModel instance = new KniffelTableModel();
for (Object[] obj : testData) {
    System.out.println((int) obj[1]);
    System.out.println("ascendingNumbers - " + obj[1] + " in " + Arrays.toString((int[]) obj[0]));

    final int result = instance.ascendingNumbers((int[]) obj[0], (int) obj[1]);

    System.out.println("Expect: " + obj[2] + " --> got: " + result);
    assertEquals((int) obj[2], result);
}

请检查KniffelTableModel类的状态变量,例如:

  • 非最终领域
  • 非最终静态字段
  • 可变类类型的字段,
  • 其他类的非最终静态用法。

如果您需要其他帮助,请发布KniffelTableModel类的代码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM