Java JUnit5/AssertJ在断言时创建日志条目

Java JUnit5/AssertJ在断言时创建日志条目,java,junit,junit5,assertj,Java,Junit,Junit5,Assertj,我需要为单元测试提供某种活动协议,为非技术参与者提供额外的可跟踪性… 所以我需要的是,每个断言还创建一个自定义日志条目 AssertJ中有什么方法可以实现这一点吗?也许是某种侦听器、扩展 目前团队使用的是纯JUnit 5,我想介绍一下AssertJ 实际上,想要的行为是通过“重载”JUnit断言实现的。 因此,除了Assertions.assertEquals(预期的,实际的)之外,还有一种方法 MyAssertions.assertEqualsAndLog(Object expected, O

我需要为单元测试提供某种活动协议,为非技术参与者提供额外的可跟踪性…
所以我需要的是,每个断言还创建一个自定义日志条目

AssertJ中有什么方法可以实现这一点吗?也许是某种侦听器、扩展

目前团队使用的是纯JUnit 5,我想介绍一下AssertJ

实际上,想要的行为是通过“重载”JUnit断言实现的。
因此,除了
Assertions.assertEquals(预期的,实际的)
之外,还有一种方法

MyAssertions.assertEqualsAndLog(Object expected, Object actual) {
    log(); //do the logging
    Assertions.assertThat(expected, actual)
}
但这并不是我真正想要的方式。
有谁知道实现这一目标的更好方法吗


谢谢

好的,不幸的是没有用于事件/挂钩/等的机制(与断言结合使用)。在资产j中。

我发现它描述了相同的行为。

目前不可能跟踪/计数/记录单个未失败的断言的原因是所有(?)断言库的通用契约非常简单:失败时抛出一个
AssertionError
,成功时不做任何事情

对于JUnit来说,在断言级别上看到成功事件需要一种将断言耦合到框架的新方法。鉴于opentest4j的使用非常缓慢,库维护者之间可能永远不会达成一致


也就是说,任何单独的框架,比如AssertJ,都可以提供一种机制来对成功事件做出反应。您只需说服他们实现它—正如另一个答案中的GitHub问题所示。

在AssertJ中,如果您使用断言描述,您可以打印它们或与您注册的任何消费者一起使用它们

例如:

//初始化描述使用者
最终StringBuilder描述ReportBuilder=新StringBuilder(String.format(“断言:%n”);
Consumer descriptionConsumer=desc->descriptionReportBuilder.append(String.format(“--%s%n”,desc));
//将描述使用者用于以下任何断言描述。
setDescriptionConsumer(descriptionConsumer);
//执行一些断言
托尔金字符佛罗多=新托尔金字符(“佛罗多”,33岁,种族,霍比特人);
assertThat(frodo.getName()).as(“检查名称”)
.isEqualTo(“佛罗多”);
断言(frodo.getAge()).as(“检查年龄”)
isEqualTo先生(33);
//拿到报告了吗
String descriptionReport=descriptionReportBuilder.toString();
将打印此报告:

Assertions:
-- check name
-- check age

请参见

单元测试应简短。配置测试框架以生成所需的报告。啊,描述。。。。这把我吓坏了。谢谢你,乔尔,图书馆太棒了。