java - AssertJ - 方法 isEqualToComparingFieldByFieldRecursively 不适用于 RuntimeException 对象

标签 java unit-testing testing junit assertj

总结

方法 isEqualToComparingFieldByFieldRecursively 不适用于 RuntimeException 对象。即使我们更改预期的 RuntimeException 中的 RuntimeException 消息,检查也始终返回 true。

无效示例(始终为真)

assertThat(caughtException).as("The Runtime exception")
            .usingComparatorForType(ComparatorCollection.getDateComparator(MAX_ALLOWABLE_SEC_FOR_EQ),
                    LocalDateTime.class)
            .usingComparatorForType(ComparatorCollection.getXmlDateComparator(MAX_ALLOWABLE_SEC_FOR_EQ),
                    XMLGregorianCalendar.class)
            .isEqualToComparingFieldByFieldRecursively(expectedResults));
            // caughtException.message and expectedResults.message are different but return true

工作示例

assertThat(caughtException).as("The Runtime exception")
            .usingComparatorForType(ComparatorCollection.getDateComparator(MAX_ALLOWABLE_SEC_FOR_EQ),
                    LocalDateTime.class)
            .usingComparatorForType(ComparatorCollection.getXmlDateComparator(MAX_ALLOWABLE_SEC_FOR_EQ),
                    XMLGregorianCalendar.class)
            .isEqualToComparingFieldByFieldRecursively(expectedResults)
            // The recursively check don't work with the RuntimeException message
            .isEqualToComparingOnlyGivenFields(expectedResults, "message");

我们进行了一些测试,第二个示例工作(当我们强制检查属性消息时)。

最佳答案

这是检索要比较的字段的代码的旧限制,它忽略 java.lang 中的任何类型(以避免逐个字段比较 Object)。

这太过激了,需要放宽,已创建此错误以跟踪问题 https://github.com/joel-costigliola/assertj-core/issues/1224 .

关于java - AssertJ - 方法 isEqualToComparingFieldByFieldRecursively 不适用于 RuntimeException 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49750071/

相关文章:

java - 重写java中的equals方法但出现逻辑错误/意外结果

c# - 比较 NUnit 中两个对象之间的相等性

java - 使用异常过滤器和 expectedExceptions 注释的 Seam 单元测试

c# - 是否可以在 C# 中使用 Moq 从另一个模拟返回一个模拟?

ruby-on-rails - ActiveRecord::RecordNotFound:

c++ - 什么是谷歌测试、死亡测试

java - 使用 spring mvc 和 sitemesh 时出现问题

java - 实现原子操作,因为java volatile 保证发生之前关系?

java - 在 Java 企业应用程序中重新映射 JNDI 资源

javascript - MemoryRouter 没有设置位置的搜索部分