Свободные утверждения: как проверить пару значений ключа без регистра
У меня есть словарь типа Dictionary<string, object>
который я пытаюсь утвердить с помощью Свободных Утверждений. Мне нужно проверить, содержит ли он ключ с именем "iss" и значение "ABC". Мне нужно сделать утверждение поля "значение", не рассматривая дело. Это поддерживается?
3 ответа
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());