junit5/assertj在Assert时创建日志条目

dced5bon  于 2021-07-07  发布在  Java
关注(0)|答案(3)|浏览(405)

我需要为单元测试提供某种活动协议,以便为非技术参与者提供额外的可跟踪性。。。
所以我需要的是,每个Assert还创建一个自定义日志条目。
assertj中有什么方法可以实现这一点吗?也许是某种听众,扩展。。。
目前团队使用的是普通的 JUnit 5 -我很想介绍一下 AssertJ .
实际上,想要的行为是通过“重载”junitAssert实现的。
所以 Assertions.assertEquals(expected, actual) 有一种方法

MyAssertions.assertEqualsAndLog(Object expected, Object actual) {
    log(); //do the logging
    Assertions.assertThat(expected, actual)
}

但这并不是我想要的方式。
有谁知道更好的方法来实现这一点吗?
谢谢

b4wnujal

b4wnujal1#

在assertj中,如果您使用Assert描述,那么您可以打印它们或与您注册的任何使用者一起使用它们。
例子:

// initialize the description consumer
final StringBuilder descriptionReportBuilder = new StringBuilder(String.format("Assertions:%n"));
Consumer<Description> descriptionConsumer = desc -> descriptionReportBuilder.append(String.format("-- %s%n", desc));

// use the description consumer for any following assertions descriptions.
Assertions.setDescriptionConsumer(descriptionConsumer);

// execute some assertions
TolkienCharacter frodo = new TolkienCharacter("Frodo", 33, Race.HOBBIT);
assertThat(frodo.getName()).as("check name")
                          .isEqualTo("Frodo");
assertThat(frodo.getAge()).as("check age")
                          .isEqualTo(33);

// get the report
String descriptionReport = descriptionReportBuilder.toString();

将打印此报告:

Assertions:
-- check name
-- check age

看到了吗https://assertj.github.io/doc/#assertj-核心Assert描述使用者

l2osamch

l2osamch2#

好吧,不幸的是没有用于事件/钩子/etc(与Assert结合使用)的机制。在资产中。
我发现第1518期描述了同样的行为。

rur96b6h

rur96b6h3#

跟踪/计数/记录单个无故障Assert目前不可能的原因是所有(?)Assert库的通用约定非常简单:抛出 AssertionError 失败时,不要为成功做任何事。
对于junit来说,在Assert级别上看到成功事件需要一种将Assert与框架耦合的新方法。鉴于opentest4j的使用非常缓慢,lib维护者之间可能永远不会达成一致。
也就是说,任何一个单独的框架,比如assertj,都可以提供一种对成功事件做出React的机制。你只需要说服他们实现它——正如另一个答案中的github问题所示。

相关问题