簡體   English   中英

流暢的斷言:XElement .Should().HaveValueContaining?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM