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

时间:2016-12-11 20:46:18

标签: java junit casting byte assertion

我编写了一个简单的算法,将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>

2 个答案:

答案 0 :(得分:3)

数组不会覆盖equals方法。您不应该使用assertEquals来比较数组。相反,您应该使用assertArrayEquals

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

答案 1 :(得分:1)

另一个选择:只需转到真正需要的一个断言: assertThat

这个断言适用于Hamcrest匹配器;所以你可以写下如下代码:

assertThat(actual, is(expected))

好的东西......只要actualexpected有匹配的类型(简单对象,数组,集合,你的名字 - 它)......上面的代码就完全可以了你认为它应该做什么。

它会为您提供一个包含两个数组的明确错误消息,以防它们不匹配!

一旦你习惯了;你会发现不再需要使用断言的任何其他变体。