我的一个包含Assert.Equal(2, list.Count);
的测试在Appveyor(一个持续集成服务器)上失败,但我无法在本地计算机上重现失败。
我希望从错误消息中获取更多信息,但不知道该怎么做。
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都阻止我们提供有关失败的其他信息,在测试失败时输出更多信息以调试远程错误?
输出其他信息的最佳方法是什么?
答案 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
格式化中的每个占位符,因为短语。