Junit5:为什么使用assertArrayEquals()会触发AssertionFailedError?

时间:2018-07-02 12:33:01

标签: java arrays assert junit5

在Eclipse中进行一些JUnit5测试,我有一个例程返回一个byte[]。因此,我使用assertArrayEquals来比较结果。但是,测试未失败(红色状态,增加Errors:),而不是失败(蓝色状态,增加Failures:)。异常跟踪如下所示:

org.opentest4j.AssertionFailedError: array contents differ at index [4], expected: <105> but was: <77>
    at org.junit.jupiter.api.AssertionUtils.fail(AssertionUtils.java:48)
    at org.junit.jupiter.api.AssertionUtils.fail(AssertionUtils.java:36)
    at org.junit.jupiter.api.AssertArrayEquals.failArraysNotEqual(AssertArrayEquals.java:434)
    at org.junit.jupiter.api.AssertArrayEquals.assertArrayEquals(AssertArrayEquals.java:214)
    at org.junit.jupiter.api.AssertArrayEquals.assertArrayEquals(AssertArrayEquals.java:72)
    at org.junit.jupiter.api.AssertArrayEquals.assertArrayEquals(AssertArrayEquals.java:64)
    at org.junit.jupiter.api.Assertions.assertArrayEquals(Assertions.java:565)
[...]

在我的特定情况下,预期结果类似于“密西西比州”,而实际结果为“ MissMissppi”。那么我应该如何正确制定测试呢? 使用断言时,我正在使用-ea运行JRE。

示例(测试方案已更改,但存在相同问题):enter image description here

1 个答案:

答案 0 :(得分:1)

测试按预期失败。

  

数组内容在索引[4]处不同

索引[4]是什么?

"Miss[i]ssippi"

  

十二月:105十六进制:0x69字符:"i"

"Miss[M]issppi"

  

十二月:77十六进制:0x4D字符:"M"

为什么它失败并显示AssertionFailedError

  

[{org.junit.jupiter.api.] Assertions是实用程序方法的集合,支持在测试中声明条件。 [...]除非另有说明,否则失败的断言将引发AssertionFailedError或其子类。

https://junit.org/junit5/docs/snapshot/api/org/junit/jupiter/api/Assertions.html