【发布时间】:2020-06-03 19:08:34
【问题描述】:
我在我的 xUnit 测试中使用the excellent Shouldly library,并且我发现自己在不同的测试中使用了设置的断言序列,所以我将它们组合成新的断言扩展方法——但是当我这样做时,我失去了@ 987654323@ 的上下文断言消息。
这是我的旧代码,它与Shouldly 一起使用,在Shouldly 断言错误中包含源级信息和调用站点上下文:
[Fact]
public void Dict_should_contain_valid_Foobar_Bar_entry()
{
IDictionary<String,Bar> dict = ...
dict.TryGetValue( "Foobar", out Bar bar ).ShouldBeTrue();
bar.ShouldNotBeNull();
bar.ChildList.Count.ShouldBe( expected: 3 );
bar.Message.ShouldBeNull();
}
[Fact]
public void Dict_should_contain_valid_Barbaz_Bar_entry()
{
IDictionary<String,Bar> dict = ...
dict.TryGetValue( "Barbaz", out Bar bar ).ShouldBeTrue();
bar.ShouldNotBeNull();
bar.ChildList.Count.ShouldBe( expected: 3 );
bar.Message.ShouldBeNull();
}
我在同一个项目中将其转换为这种新的扩展方法:
public static void ShouldBeValidBar( this IDictionary<String,Bar> dict, String barName )
{
dict.ShouldNotBeNull();
dict.TryGetValue( barName, out Bar bar ).ShouldBeTrue();
bar.ShouldNotBeNull();
bar.ChildList.Count.ShouldBe( expected: 3 );
bar.Message.ShouldBeNull();
}
所以我的测试变成了这样:
[Fact]
public void Dict_should_contain_valid_Foobar_Bar_entry()
{
IDictionary<String,Bar> dict = ...
dict.ShouldBeValidBar( "Foobar" );
}
[Fact]
public void Dict_should_contain_valid_Barbaz_Bar_entry()
{
IDictionary<String,Bar> dict = ...
dict.ShouldBeValidBar( "Barbaz" );
}
...但是现在我的应该断言消息不包含来自 Dict_should_contain_valid_Foobar_Bar_entry 的任何上下文信息,而只包含来自 ShouldBeValidBar 的上下文。
我如何指示Shouldly 忽略ShouldBeValidBar 的上下文并改用其父调用站点?
【问题讨论】:
标签: c# unit-testing assert xunit shouldly