Fluent Assertions - null 和空字符串比较 [关闭]
Posted
技术标签:
【中文标题】Fluent Assertions - null 和空字符串比较 [关闭]【英文标题】:Fluent Assertions - null and empty string comparison [closed] 【发布时间】:2021-03-20 03:40:52 【问题描述】:是否可以强制流利的断言通过 Should().Be() 来比较空字符串和空字符串?或者也许这可以通过 BeEquivalentTo 以某种方式完成?
例子:
text1.Should().Be(text2);
我希望上面的代码在以下情况下通过:
text1 将是 'foo' 而 text2 将是 'foo'(只是标准行为) text1 为空字符串,text2 为空所以我需要做出可以比较字符串的断言,但如果其中一个为空而另一个为空,它仍然应该通过。
一些上下文:
我需要它来进行硒自动测试。我有一些 Dto,我将其发送到 api 以创建产品表作为测试先决条件(Dto 的某些字段可以为空)。然后在应用程序的 UI 中,此 null 显示为空字符串。稍后在测试中,我正在检查每列是否存在正确的数据,并且我希望能够使流利的断言在空字符串和 null 之间传递断言(当然,如果比较两个正确的字符串仍然可以通过 -> 当没有 Dto 字段时空)。
【问题讨论】:
这能回答你的问题吗? Fluent assertion for OR condition 【参考方案1】:你可以使用 AssertionScope
string text1 = "";
string text2 = null;
using (new AssertionScope())
test1.Should().BeOneOf("foo", null, "");
test2.Should().BeOneOf("foo", null, "");
;
【讨论】:
正如我所说,Dto 的这个字段“可以”为空,但在大多数情况下,我会将它们与字符串一起使用。如果我将填写 Dto 的所有字段,那么在 UI 中我会看到正确的字符串。所以我不能使用 BeNullOrEmpty() 选项,因为它并不总是空的 即使 text1 为空,这也是正确的 我已经用更好的例子更新了帖子,所以也许它会更容易得到我需要它的工作方式【参考方案2】:您可以编写自己的流畅扩展来定义自己的断言:
public static class FluentExtensions
public static AndConstraint<StringAssertions> BeEquivalentLenient(this StringAssertions instance, string expected, string because = "", params object[] becauseArgs)
Execute.Assertion
.BecauseOf(because, becauseArgs)
.ForCondition(beEquivalentLenient(instance.Subject, expected))
.FailWith("Not equivalent!");
return new AndConstraint<StringAssertions>(instance);
private static bool beEquivalentLenient(string s1, string s2)
if (s1.IsNullOrEmpty())
return s2.IsNullOrEmpty();
return s1.Equals(s2);
现在你可以像这样使用它了:
((string) null).Should().BeEquivalentLenient("");
"".Should().BeEquivalentLenient(null);
"bla".Should().BeEquivalentLenient("b"+"la");
【讨论】:
以上是关于Fluent Assertions - null 和空字符串比较 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
Fluent Assertions Should().BeEquivalentTo 只有私有字段
Fluent Assertions ShouldBeEquivalentTo 总是以不同的属性传递