2016-12-11 5 views
2

私は、String形式の2進数をByteの配列に変換する簡単なアルゴリズムを書いています。私はintのを使用して8ビットの数値を計算し、それをバイトにキャストします。バイトにキャストする際にJUnitエラーが発生しましたか?

assertEquals(new byte[] {(byte) 0} , Set1.binToBytes("00000000")); 

だから、8ゼロの文字列が0バイトになる必要があります。

問題は、私はJUnitの中に次のコードを実行したときに表示されます。 AssertionErrorで終わります。デバッグ中に変数をトレースするとき、私は以下のが見つかりました:

期待

:[0] 実際:[0]

それはJUnitのエラーです、または私は何かを台無しに?上記の2つのタイプが異なっていますか?

全体JUnitテストを実行した後、私は次のようなエラーが見つかりました:

java.lang.AssertionError: expected:<[[email protected]> but was:<[[email protected]> 
+0

Equals(およびassertEquals)は配列の等価性をチェックしません。 'arr1.equals(arr2)'は 'arr1 == arr2'の場合にのみtrueになります。 – user2864740

答えて

3

配列は、equalsメソッドをオーバーライドしません。配列の比較にassertEqualsを使用しないでください。代わりに、あなたはassertArrayEqualsを使用する必要があります。

assertArrayEquals(new byte[] {(byte) 0} , Set1.binToBytes("00000000")); 
+1

あなたはassertEqualsを使用しないでください。 – GregT

+0

@ user1257384 grr、はい、もちろんです。愚かなタイプミス。 – Mureinik

1

別のオプション:単に1が本当に必要1つのアサートに回す:assertThat

このアサートはHamcrestのマッチャで動作します。あなたは次のようなコード書き留めることができます限り...

assertThat(actual, is(expected)) 

そして素晴らしい事をactualexpected一致するタイプ(単純なオブジェクト、配列、コレクション、あなたの名-それを)持っている...上記のようにコードはまさにあなたが考えるべきことをします。

これは、両方の配列が含まれていて、それらが一致しない場合に便利なエラーメッセージです。

すぐにそれに慣れると、他のバリエーションのアサーションを使用する必要はもうなくなります。

関連する問題