2016-07-07 5 views
0

У меня есть словарь типа Dictionary<string, object>, который я пытаюсь утверждать с помощью бесплатных утверждений. Мне нужно проверить, содержит ли он ключ с именем «iss» и значением «ABC». Мне нужно сделать поле «значение» без рассмотрения дела. Поддерживается ли это?Свободные утверждения: Как проверить пару ключевых значений с кодом случая

+0

это один элемент словаря, который имеет ключ «iss» и значение «abc» или отдельный? –

+0

Да, это возможно и не сложно. Какой у вас код до сих пор? –

+0

это словарь, который имеет один из ключей как «iss» и значение «abc». – Shetty

ответ

0

Вы должны создать пользовательское утверждение .. Что-то вдоль этих линий

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() .. но если вы начали

+0

Я также оцениваю другие варианты. Я приму ответ, если не найду лучшего решения. – Shetty

+0

Это не работает. assertions.Subject.Any (a => a.Key == key && string.Equals (a.Value as string, value, StringComparison.InvariantCultureIgnoreCase)) возвращает false – Shetty

+0

@Shetty Я просто попробовал еще раз и возвращает true. Я обновляю код, чтобы показать полное тестовое оборудование NUnit. Надеюсь, это поможет –

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

.WhichValue.Should(). BeEquivalentTo ("abc") не существует. и .WhichValue.Should(). ShouldBeEquivalentTo ("abc") не работает. Он сравнивается с случаем. – Shetty