java - 使用assertj时是否可以记录被断言的字段的名称和值以及条件?

标签 java assert assertj

例如,对于这个断言 -

aString = "堆栈溢出"; 另一个字符串=“堆栈”;

assertThat(aString).startsWith(anotherString);

是否可以添加这样的记录器 -

assertThat(aString ["堆栈溢出"]).startsWith(另一个强["堆栈"])

..或类似的东西。我感兴趣的是隐式记录断言的类型以及断言下字段的名称和当前值。

最佳答案

您应该阅读 AssertJ 的代码(对于您的示例,这将是 AbstractStringAssertAbstractCharSequenceAssertAbstractAssert ),您将得到答案:这在 AssertJ 中直接是不可能的。即使在失败的情况下,错误也应该清楚地表明正在测试的断言。

但是您可以通过其他方式做到这一点:

  • 在 AssertJ 上启用代码覆盖率,这将至少提供测试中使用的 AssertJ 的类/方法(但您不需要这些值)。
  • 尝试使用 ASM 或字节码操作来自己实现这一点。
  • fork AssertJ 存储库并添加您自己的日志记录™:您可以通过查看断言失败时执行的操作并在失败案例后添加附加日志来侵入。

关于java - 使用assertj时是否可以记录被断言的字段的名称和值以及条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57334283/

相关文章:

c# - 验证列表已排序且项目具有特殊字符时获取 NUnit AssertionException

java - 在测试中断言 java.util.Date 字段

spring-mvc - 有没有办法将 AssertJ 断言与 Spring MVC 测试一起使用?

java - Double.NaN isCloseTo double 值意外返回 true

java - 管道 hadoop mapreduce 作业

c# - Xunit.Assert.Collection 中的问题 - C#

java - 为什么一个后台线程与主服务线程具有相同的线程ID?

java - Junit 在等待并处理异常后断言某些内容

java - 在 Java 中使用 ProcessBuilder 执行命令时出现 IllegalArgumentException

java - 当按下后退按钮时,为Android Fragment调用Java中的AlertDialog.Builder