Java 转换为字节时出现JUnit错误?

Java 转换为字节时出现JUnit错误?,java,junit,casting,byte,assertion,Java,Junit,Casting,Byte,Assertion,我编写了一个简单的算法,将字符串格式的二进制数转换为字节数组。我使用int计算8位的数值,然后将其转换为字节 在JUnit中运行以下代码时出现问题: assertEquals( new byte[] {(byte) 0} , Set1.binToBytes("00000000") ); 因此,一个包含8个零的字符串应该产生一个0字节。它以断言错误结束。在调试期间跟踪变量时,我发现了以下情况: 预期值:[0] 实际:[0] 这是JUnit中的错误,还是我弄糟了什么?以上两种是不同类型的吗 在运行

我编写了一个简单的算法,将字符串格式的二进制数转换为字节数组。我使用int计算8位的数值,然后将其转换为字节

在JUnit中运行以下代码时出现问题:

assertEquals( new byte[] {(byte) 0} , Set1.binToBytes("00000000") );
因此,一个包含8个零的字符串应该产生一个0字节。它以断言错误结束。在调试期间跟踪变量时,我发现了以下情况:

预期值:[0] 实际:[0]

这是JUnit中的错误,还是我弄糟了什么?以上两种是不同类型的吗

在运行整个JUnit测试后,我发现以下错误:

java.lang.AssertionError: expected:<[B@65e2dbf3> but was:<[B@4f970963>
数组不重写equals方法。您不应该使用assertEquals来比较数组。相反,您应该使用:


另一种选择:只需使用真正需要的断言:

此断言与Hamcrest matchers一起工作;因此,您可以编写如下代码:

assertThat(actual, is(expected))
还有件好事。。。只要实际的和预期的有匹配的类型简单的对象,数组,集合,你命名它。。。上面的代码将完全执行您认为它应该执行的操作

如果两个数组不匹配,它会给出一条清晰的错误消息,其中包含这两个数组


一旦你习惯了它;您将发现不再需要使用任何其他assert变体。

Equals和assertEquals不检查数组相等性:arr1.equalsarr2仅在arr1==arr2时为真。您的意思是我不应该使用assertEquals。
assertThat(actual, is(expected))