我有两个相同类型的对象,该类型有一个字符串字段,在第一个对象中值为 null,在第二个对象中值为“”,如何强制流利的断言假设这是正确的?
断言本身:
callResult.ShouldBeEquivalentTo(centreResponse,
opt => opt.Excluding(r => r.DateOpen));
这里引发了异常,说明期望值为空,真正的值为“”(反之亦然)
我有两个相同类型的对象,该类型有一个字符串字段,在第一个对象中值为 null,在第二个对象中值为“”,如何强制流利的断言假设这是正确的?
断言本身:
callResult.ShouldBeEquivalentTo(centreResponse,
opt => opt.Excluding(r => r.DateOpen));
这里引发了异常,说明期望值为空,真正的值为“”(反之亦然)
您可以做的是覆盖以下类型的属性的行为string
:
callResult.ShouldBeEquivalentTo(centreResponse, opt => opt
.Excluding(r => r.DateOpen)
.Using<string>(ctx => CompareStrings(ctx)).WhenTypeIs<string>());
public void CompareStrings(IAssertionContext<string> ctx)
{
var equal = (ctx.Subject ?? string.Empty).Equals(ctx.Expectation ?? string.Empty);
Execute.Assertion
.BecauseOf(ctx.Because, ctx.BecauseArgs)
.ForCondition(equal)
.FailWith("Expected {context:string} to be {0}{reason}, but found {1}", ctx.Subject, ctx.Expectation);
}
CompareStrings
您可以通过将方法封装在IAssertionRule
. 请参阅此处RelaxingDateTimeAssertionRule
的 FluentAssertions 单元测试。
您可以将该自定义断言规则添加为callResult
变量类型上所有断言的默认值,但我仍然需要添加一些内容以允许全局默认值。