【问题标题】:FluentAssertions Should.Equal on collections, containing nullsFluentAssertions Should.Equal 在集合上,包含空值
【发布时间】:2012-02-17 20:46:02
【问题描述】:

当我尝试将两个集合与空值进行比较时,FluentAssertions 似乎因 NullReferece 异常而失败

    [Test]
    public void DeepWithNulls()
    {
        var l1 = new List<string> { "aaa", null };
        var l2 = new List<string> { "aaa", null };

        l1.Should().Equal(l2);
    }

比较在没有空值的集合上按预期工作。

【问题讨论】:

    标签: c# fluent-assertions


    【解决方案1】:

    这是因为 Fluent Assertion 在集合比较逻辑的深处使用以下代码

     for (int index = 0; index < expectedItems.Length; index++)
                {
                    verification.ForCondition((index < actualItems.Length) && actualItems[index].Equals(expectedItems[index]))
                        .FailWith("Expected " + Verification.SubjectNameOr("collection") +
                            " to be equal to {0}{reason}, but {1} differs at index {2}.", expected, Subject, index);
                }
    

    在上面的代码中,expectedItemsactualItems 是你的列表

    现在想想在第二次迭代期间会发生什么(下面的部分)将被执行?

    actualItems[index].Equals(expectedItems[index])

    因为actualItems[1]null 所以它抛出空引用异常

    【讨论】:

    • Fluent Assertions 有一些解决方法吗?或者如果我确定空值对于测试的集合是正常的,我必须在单元测试中使用循环?
    • 现在我建议在调用 equal 之前确保集合中没有 null 并在 fluentassertioncodeplex 站点上提交错误。另一种选择可能是下载源代码并自行修复:)
    • @tensorsigma - 我建议不要下载和更改源代码。一旦您开始添加自定义修复程序,您将不愿意下载项目的更新,因为您必须重新添加所有这些内容。当然,除非项目所有者接受您的更改并将它们合并到项目代码库中。
    • 已在 1.7.0 发布分支和主干中修复。如果需要,可以直接从源代码编译更新版本:- Dennis Doomen
    猜你喜欢
    • 2017-12-02
    • 2022-07-17
    • 1970-01-01
    • 2018-09-25
    • 2015-03-15
    • 1970-01-01
    • 2012-11-30
    • 2013-09-26
    • 1970-01-01
    相关资源
    最近更新 更多