【问题标题】:Fluent Assertions : How to check for key value pair with out case流利的断言:如何在不区分大小写的情况下检查键值对
【发布时间】:2016-11-10 04:03:02
【问题描述】:

我有一个 Dictionary<string, object> 类型的字典,我正在尝试使用 Fluent Assertions 进行断言。我需要检查它是否包含一个名为“iss”的键和值“ABC”。我需要在不考虑案例的情况下断言“值”字段。支持吗?

【问题讨论】:

  • 它是具有键“iss”和值“abc”的单个字典项还是单独的?
  • 是的,这是可能的,而且不难。到目前为止你有什么代码?
  • 这是一本字典,其中一个键为“iss”,值为“abc”
  • payload.Should().Contain("iss", ValidIssuer);是我所拥有的。我不想使用 ValidIssuer.ToLower 因为我不知道会发生什么
  • @Shetty。答案有帮助吗?

标签: c# fluent-assertions


【解决方案1】:
dictionary.Should().ContainKey("iss").WhichValue.Should().BeEquivalentTo("abc");

【讨论】:

  • .WhichValue.Should().BeEquivalentTo("abc") 不存在。和 .WhichValue.Should().ShouldBeEquivalentTo("abc") 不起作用。它与大小写进行比较。
【解决方案2】:

您应该创建一个自定义断言.. 一些类似的东西

 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() 有点不雅......但应该让你开始

【讨论】:

  • 我也在评估其他选项。如果我没有找到更好的解决方案,我会接受答案
  • 这不起作用。 assertions.Subject.Any(a => a.Key == key && string.Equals(a.Value as string, value, StringComparison.InvariantCultureIgnoreCase)) 返回 false
  • @Shetty 我又试了一次,它返回 true。我更新了代码以显示完整的 NUnit 测试夹具。希望这会有所帮助
【解决方案3】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-26
    • 1970-01-01
    • 1970-01-01
    • 2020-02-11
    • 2020-07-22
    • 1970-01-01
    相关资源
    最近更新 更多