Свободные утверждения: как проверить пару значений ключа без регистра

У меня есть словарь типа 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());
Другие вопросы по тегам