测试失败时输出附加信息

时间:2018-06-06 05:33:24

标签: unit-testing continuous-integration xunit fluent-assertions

我的一个包含Assert.Equal(2, list.Count);的测试在Appveyor(一个持续集成服务器)上失败,但我无法在本地计算机上重现失败。

enter image description here

我希望从错误消息中获取更多信息,但不知道该怎么做。

xUnit.net的作者坚持认为他们不应该允许用户指定自定义错误消息,请参阅https://github.com/xunit/xunit/issues/350。这就是为什么没有API允许我写例如。 Assert.Equal(2, list.Count, "The content of the list is " + ...);

我也看了一下Fluent Assertions。如果我写list.Should().HaveCount(3, "the content of the list is " + ...);,输出读为

  

预期集合包含3个项目,因为列表的内容为
  ......,但发现2。

"因为"条款在英语语法中没有意义。因为参数似乎用于描述预期的行为,而不是实际的行为。

考虑到xUnit.net和Fluent Assertions都阻止我们提供有关失败的其他信息,在测试失败时输出更多信息以调试远程错误?

输出其他信息的最佳方法是什么?

1 个答案:

答案 0 :(得分:2)

如果您想查看列表的实际内容以进行调试,并且您正在使用Fluent Assertions,则可以执行以下操作:

using (new AssertionScope(Formatter.ToString(list)) { list.Should().HaveCount(3); }

断言范围将用其他内容替换消息的collection部分。这不好,但会奏效。

或者,您可以使用because参数,如下所示:

list.Should().HaveCount(3, "because I expected list {0} to contain that many items", list);

FA会使用相同的Formatter.String格式化中的每个占位符,因为短语。