我有一个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());