[英]Fluent Assertions Should().Should().BeEquivalentTo ignores excluded member
[英]Fluent Assertions: XElement .Should().HaveValueContaining?
我想测试一个 XML 元素的值是否包含一个特定的字符串。 [下面的代码显然是人为设计的,而不是我正在处理的真实代码库]。 如何使用 Fluent Assertions 检查 XElement 的值是否包含字符串?
using System.Xml.Linq;
using FluentAssertions;
class Program
{
private static void Main()
{
var x = new XElement("Root", new XElement("Name", "Fat Cat Sat"));
x.Should().HaveElement("Name").Which.Should().HaveValue("Fat Cat Sat");
// don't know how to do this:
x.Should().HaveElement("Name").Which.Should().HaveValueContaining("Cat");
}
}
XML 节点的值只是一个字符串,具有多个由空格分隔的“条目”在 XML 中并没有什么特别之处——因此我们需要将此断言视为普通字符串。
x.Should().HaveElement("Name").Which.Value.Split(' ').Should().Contain("Cat");
这里的重要区别是.Which.Value
,因此我们只断言节点(它是一个字符串)的值,而不是整个节点。 从那里,您可以按空格拆分,然后检查生成的集合是否包含您要查找的条目之一。
FluentAssertions 可以扩展,所以你可以添加一个扩展方法来检查文本是否包含在值中:
public static class FluentExtensions {
public static AndConstraint<XElementAssertions> HaveValueContaining(this XElementAssertions element, string text) {
{
Execute.Assertion
.ForCondition(element.Subject.Value.Contains(text))
.FailWith($"Element value does not contain '{text}'");
return new AndConstraint<XElementAssertions>(element);
}
}
}
那么这个测试就会通过:
[Test]
public void Test() {
var x = new XElement("Root", new XElement("Name", "Fat Cat Sat"));
x.Should().HaveElement("Name").Which.Should().HaveValue("Fat Cat Sat");
x.Should().HaveElement("Name").Which.Should().HaveValueContaining("Cat");
x.Should().HaveElement("Name").Which.Should().HaveValueContaining("Cat Sat");
}
这个测试会失败:
[Test]
public void Test() {
var x = new XElement("Root", new XElement("Name", "Fat Cat Sat"));
x.Should().HaveElement("Name").Which.Should().HaveValue("Fat Cat Sat");
x.Should().HaveElement("Name").Which.Should().HaveValueContaining("Cat Mat");
}
元素值不包含“猫垫”
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.