流利的断言:如何检查不带大小写的键值对



我有一个Dictionary<string, object>类型的字典,我正在尝试用流利断言断言。我需要检查它是否包含一个名为"iss"和值"ABC"的键。我需要在不考虑情况的情况下断言"值"字段。是否受支持?

dictionary.Should().ContainKey("iss").WhichValue.Should().BeEquivalentTo("abc");

你应该创建一个自定义断言。类似的东西

 public static class GenericDictionaryAssertions
{
    public static void FirstKeyMatchesAndValueInvariantMatch<TKey, TValue>(this GenericDictionaryAssertions<TKey, TValue> assertions, TKey key, string value) where TKey : class
    {
        var someCondition = assertions.Subject.Any(a => a.Key == key && string.Equals(a.Value as string, value, StringComparison.InvariantCultureIgnoreCase));
        Execute.Assertion
           .ForCondition(someCondition)
           .BecauseOf("")
           .FailWith("Expected list to contain key " + key);
    }
}

用法:

[TestFixture]
public class Tests
{
    [Test]
    public void Normal()
    {
        var actual = new Dictionary<string, object> {{"iss", "abc"}};
        actual.Should().FirstKeyMatchesAndValueInvariantMatch("iss", "ABC");
    }
}

由于ToString()有点不优雅,但应该让你开始

因此,在学习了查找KeyValuePair的各种方法(只是发现数据集本身是问题所在)之后,我发现这是处理您使用FluentAssertions的字典查找的最简单方法。

dictionary.Should().Contain("iss", "ABC".ToLowerInvariant());

最新更新