C# FluentAssertions断言范围上下文子路径
是否有任何方法可以指定内置断言的C# FluentAssertions断言范围上下文子路径,c#,.net,fluent-assertions,C#,.net,Fluent Assertions,是否有任何方法可以指定内置断言的{context}键的附加内容,或潜在地获取该上下文的值 样品 例如,我使用自定义执行的assertionscope键成功地附加到自定义断言中。断言如下所示: 示例类 扩展类 试验方法 输出 问题: 我怎样才能附加到内置的{context},这样就不必为已经提供的每个断言流重新发明轮子 例如,调用标准的布尔断言.Should().BeTrue(): 但这会丢失.Bar.IsFull的子路径,并输出: Output: Expected foo to be true
{context}
键的附加内容,或潜在地获取该上下文的值
样品
例如,我使用自定义执行的assertionscope
键成功地附加到自定义断言中。断言如下所示:
示例类
扩展类
试验方法
输出
问题:
我怎样才能附加到内置的{context}
,这样就不必为已经提供的每个断言流重新发明轮子
例如,调用标准的布尔断言.Should().BeTrue()
:
但这会丢失.Bar.IsFull
的子路径,并输出:
Output: Expected foo to be true, but found False.
尝试
试一试
试图将内部断言范围的“上下文”设置为某个值,但它丢失了以前的值
[CustomAssertion]
public void HaveFullBar(string because = null, params object[] becauseArgs)
{
using (new AssertionScope(".Bar"))
{
Subject.Bar.Should().BeFull(because, becauseArgs);
}
}
[CustomAssertion]
public void BeFull(string because = null, params object[] becauseArgs)
{
using (new AssertionScope(".IsFull"))
{
Subject.IsFull.Should().BeTrue();
}
}
这只返回.IsFull
,这是最内部的断言范围:
Expected .IsFull to be true, but found False.
第二次尝试
试图将“{context}”添加到AssertionScope
[CustomAssertion]
public void HaveFullBar(string because = null, params object[] becauseArgs)
{
using (new AssertionScope("{context}.Bar"))
{
Subject.Bar.Should().BeFull(because, becauseArgs);
}
}
[CustomAssertion]
public void BeFull(string because = null, params object[] becauseArgs)
{
using (new AssertionScope("{context}.IsFull"))
{
Subject.IsFull.Should().BeTrue();
}
}
这只输出最内部的{context}.IsFull
Expected {context}.IsFull to be true, but found False.
第三次尝试
仍然会丢失原始上下文,因为第一个断言scope.Current.context是
null
输出:
Expected .Bar.IsFull to be true, but found False.
你有没有在Git回购中的某个地方进行过我可以查看的尝试?@DennisDoomen现在没有,我可能会在FA回购中提出一个问题,如果可以的话,在fork存储库中进行这些测试?
[CustomAssertion]
public void HaveFullBar(string because = null, params object[] becauseArgs)
{
using (new AssertionScope(".Bar"))
{
Subject.Bar.Should().BeFull(because, becauseArgs);
}
}
[CustomAssertion]
public void BeFull(string because = null, params object[] becauseArgs)
{
using (new AssertionScope(".IsFull"))
{
Subject.IsFull.Should().BeTrue();
}
}
Expected .IsFull to be true, but found False.
[CustomAssertion]
public void HaveFullBar(string because = null, params object[] becauseArgs)
{
using (new AssertionScope("{context}.Bar"))
{
Subject.Bar.Should().BeFull(because, becauseArgs);
}
}
[CustomAssertion]
public void BeFull(string because = null, params object[] becauseArgs)
{
using (new AssertionScope("{context}.IsFull"))
{
Subject.IsFull.Should().BeTrue();
}
}
Expected {context}.IsFull to be true, but found False.
[CustomAssertion]
public void HaveFullBar(string because = null, params object[] becauseArgs)
{
using (new AssertionScope(AssertionScope.Current.Context + ".Bar"))
{
Subject.Bar.Should().BeFull(because, becauseArgs);
}
}
[CustomAssertion]
public void BeFull(string because = null, params object[] becauseArgs)
{
using (var scope = new AssertionScope(AssertionScope.Current.Context + ".IsFull"))
{
Subject.IsFull.Should().BeTrue();
}
}
Expected .Bar.IsFull to be true, but found False.