2010-11-19 2 views
84

JUnitの2つの型付き配列でequalsアサーションを行うための簡潔で組み込みの方法がありますか?デフォルトでは(少なくともJUnit 4では)、配列オブジェクト自体に対してインスタンス比較を実行するようです。JUnitアサーションの配列を簡潔に組み込みの方法で比較しますか?

EGは、動作しません。もちろん

int[] expectedResult = new int[] { 116800, 116800 }; 
int[] result = new GraphixMask().sortedAreas(rectangles); 
assertEquals(expectedResult, result); 

を、私は手動でそれを行うことができます。

assertEquals(expectedResult.length, result.length); 
for (int i = 0; i < expectedResult.length; i++) 
    assertEquals("mismatch at " + i, expectedResult[i], result[i]); 

..but良い方法はありますか?

assertTrue(Arrays.equals(expectedResult, result)); 

答えて

175

使用org.junit.Assertの方法assertArrayEquals::このメソッドが使用できない場合

import org.junit.Assert; 
... 

Assert.assertArrayEquals(expectedResult, result); 

、誤ってインポートしたことがありAssertクラス

30

あなたはArrays.equals(..)を使用することができますjunit.frameworkから。

+10

そのかかわらについて悪臭を放つあなたはそれが失敗したときに何が悪かったのかについてのデータを取得していないです。 – mBria

+7

あなたが古いjunitバージョンを使用している場合(Androidなど) – Zitrax

+0

一致しないバイトを確認する場合は、文字列に変換できます。assertEquals(Arrays.toString(expectedResult)、Arrays.toString(result)) ; – Erdem

10
+1

私は 'junit.framework.Assert'に 'assertArrayEquals'が見つかりませんか? – mBria

+1

@mBriaはあなたのjunitをアップグレードします – Bozho

+0

4.8.1は私が持っているもので、Maven(http://grepcode.com/search?query=junit+4.9&start=0&entity=type&n=)を介して入手可能な最新のものが表示されます。それは4.8.2か4.9にしかないのですか? – mBria

2

私は質問はJUnit4のためですけど、あなたはJUnit3で立ち往生することが起こるならば、あなたがそのような短いユーティリティ関数を作成できます。JUnit3で

private void assertArrayEquals(Object[] esperado, Object[] real) { 
    assertEquals(Arrays.asList(esperado), Arrays.asList(real));  
} 

を、これは直接の配列を比較するよりも優れていますどの要素が異なっているかを詳細に記述するためです。

8

私は文字列に配列を変換することを好む:間違った値がどこにあるか、私ははっきりと見ることができる

Assert.assertEquals(
       Arrays.toString(values), 
       Arrays.toString(new int[] { 7, 8, 9, 3 })); 

この方法。これは小規模な配列に対してのみ効果的ですが、単体テストでは7以上の項目を持つ配列はほとんど使用しません。

このメソッドは、オーバーロードでtoStringがすべての必須情報を返すときに、プリミティブ型および他の型に対して機能します。

0

junit4とHamcrestを使用すると、配列を比較する簡潔な方法が得られます。また、障害トレース内のエラーの詳細についても説明します。

import static org.junit.Assert.* 
import static org.hamcrest.CoreMatchers.*; 

//... 

assertThat(result, is(new int[] {56, 100, 2000})); 

障害トレース出力:

java.lang.AssertionError: 
    Expected: is [<56>, <100>, <2000>] 
    but: was [<55>, <100>, <2000>] 
関連する問題