1

以下是我对该方法的了解:

public int[] generateNumbers(int numberOfTimes){
        int[] generatedNumbers = new int[numberOfTimes];
        int counter = 0;
        while(counter < generatedNumbers.length){
            generatedNumbers[counter] = generator.nextInt(this.maxNumber - this.minNumber + 1) + this.minNumber;
            counter++;
        }
        return generatedNumbers;    
    }

我创建了一个 JUnit4 测试,只是为了测试它的输出,我有这个:

@Test
    public void testGenerateNumbers() {
        assertEquals(this.simulator.generateNumbers(1), 2);
    }

现在,这显然返回 false,预期值为 <[I@6f1d0b1>。为什么我得到一个位置而不是实际的数组?任何帮助将不胜感激......顺便说一句,我们必须使用assertEquals,所以其他任何事情都是不可能的,是的,我意识到使用其他东西来测试它更容易。

4

3 回答 3

5

你需要使用assertArrayEquals()

assertArrayEquals(this.simulator.generateNumbers(1), new int[] {2});
于 2013-09-11T17:24:34.820 回答
3

为什么我得到一个位置而不是实际的数组?

您正在获取数组(参考),但错误消息正在打印出调用toString()它的结果。不幸的是,这对你来说并不可怕。

如果您实际上是在尝试检查length,则需要这样做:

assertEquals(1, simulator.generateNumbers(1).length);

或者检查数组中的第一个值:

assertEquals(2, simulator.generateNumbers(1)[0]);

(请注意,期望值是第一位的。为了使错误消息合理,正确获取“预期”和“实际”顺序非常重要。)

当然assertArrayEquals是这里最好的方法,但是如果你真的需要使用assertEquals,你可以将数组转换为列表:

assertEquals(Arrays.asList(new int[] { 2 }),
             Arrays.asList(simulator.generateNumbers(1)));

(目前尚不清楚为什么 assertEquals这是您唯一可用的断言......这是一个非常奇怪的约束。)

于 2013-09-11T17:25:46.780 回答
0

如果你绝对必须使用assertEquals(我想知道为什么),你可以这样做:

assertEquals(true, Arrays.equals(new int[] { 2 }, this.simulator.generateNumbers(1)));
于 2013-09-11T18:48:31.117 回答