我编写了一个简单的算法,将String格式的二进制数转换为字节数组。我使用int来计算8位的数值,然后将其转换为byte。
当我在JUnit中运行以下代码时出现问题:
assertEquals( new byte[] {(byte) 0} , Set1.binToBytes("00000000") );
因此,一个包含8个零的字符串应该会产生一个0字节。它以AssertionError结尾。在调试期间跟踪变量时,我发现了以下内容:
预期:[0] 实际:[0]
这是JUnit中的错误,还是搞砸了什么?上面两个是不同类型的吗?
运行整个JUnit测试后,我发现以下错误:
java.lang.AssertionError: expected:<[B@65e2dbf3> but was:<[B@4f970963>
答案 0 :(得分:3)
数组不会覆盖equals
方法。您不应该使用assertEquals
来比较数组。相反,您应该使用assertArrayEquals
:
assertArrayEquals( new byte[] {(byte) 0} , Set1.binToBytes("00000000") );
答案 1 :(得分:1)
另一个选择:只需转到真正需要的一个断言: assertThat
这个断言适用于Hamcrest匹配器;所以你可以写下如下代码:
assertThat(actual, is(expected))
好的东西......只要actual
和expected
有匹配的类型(简单对象,数组,集合,你的名字 - 它)......上面的代码就完全可以了你认为它应该做什么。
它会为您提供一个包含两个数组的明确错误消息,以防它们不匹配!
一旦你习惯了;你会发现不再需要使用断言的任何其他变体。