繁体   English   中英

如何在流畅的断言中比较null和string.Empty(或“”)?

[英]How can I compare null and string.Empty (or “”) in fluent assertions?

我有两个相同类型的对象,类型有一个字符串字段,在第一个对象中值为null,在第二个对象中值为“”,如何强制流畅的assesrtions假设这是正确的?

Assesrtion本身:

callResult.ShouldBeEquivalentTo(centreResponse, 
                                opt => opt.Excluding(r => r.DateOpen));

这里引发异常,声明期望值为null,真实值为“”(反之亦然)

你可以做的是覆盖类型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方法封装在CompareStrings的实现中来IAssertionRule RelaxingDateTimeAssertionRule在FluentAssertions的单元测试在这里

您可以将自定义断言规则添加为callResult变量类型的所有断言的默认值,但我仍然需要添加一些内容以允许全局默认值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM