は標準JUnit
を使用して、次のテストケースをアサートし、hamcrestのassertThat
考えてみましょう:hamcrestは、バイト0がint 0と等しくないと言うのはなぜですか?
byte b = 0;
int i = 0;
assertEquals(b, i); // success
assertThat(b, equalTo(i)); // java.lang.AssertionError: Expected: <0> but: was <0>
if (b == i) {
fail(); // test fails, so b == i is true for the JVM
}
だから、なぜでしょうか? b == i
がtrue
なので、値は明らかにJVMで等しいので、hamcrest
はなぜ失敗しますか?
Byte.valueOf((byte)0).equals(Integer.valueOf(0))はfalseです。 – assylias
上記の* assylias *の例に見られるように、バイトは自動ボックス化されてByteオブジェクトになります。 [HamcrestのequalToドキュメント](http://hamcrest.org/JavaHamcrest/javadoc/1.3/org/hamcrest/core/IsEqual.html#equalTo(T))に見られるように、Object1.equals(Object2)を使用します。 byteとintの両方がプリミティブなので、それらをByteオブジェクトとIntegerオブジェクトにオートボックスします。 Byte1。これらの囲みオブジェクトの値が同じであっても、equals(Integer1)はfalseを返します。 –