Я использую отличную Shouldly
библиотеку в своих тестах xUnit, и я обнаружил, что использую заданную последовательность утверждений в разных тестах, поэтому я объединяю их в новые методы расширения утверждений - но когда я это делаю, я теряю сообщения контекстного утверждения Shouldly
.
Вот мой старый код, который работает с 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" );
}
... но теперь мои сообщения Shouldly assert не содержат никакой контекстной информации из Dict_should_contain_valid_Foobar_Bar_entry
, а вместо этого содержат только контекст из ShouldBeValidBar
.
Как я могу проинструктировать Shouldly
игнорировать контекст ShouldBeValidBar
и использовать вместо него родительский call-site?