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()しています。残念ながら、それはあなたにとってそれほど役に立ちません。

実際に長さを確認しようとしている場合は、次のようにする必要があります。

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 に答える