【问题标题】:How to compare IReadOnlyCollection<bool> to List<bool> for equality by value?如何按值比较 IReadOnlyCollection<bool> 和 List<bool> 的相等性?
【发布时间】:2018-06-12 14:52:51
【问题描述】:

我正在尝试编写一个单元测试来将实际结果与预期结果进行比较,其中我正在测试的类给了我一个 IReadOnlyCollection,而我的预期结果是 List。

我在How to compare Lists in Unit Testing 阅读了有关使用 CollectionAssert 比较列表的答案,但是当我尝试这样做时,我收到编译器错误“无法从 'System.Collections.Generic.IReadOnlyCollection' 转换为 'System.Collections。 ICollection'"

这是我的测试方法:

    [TestMethod]
    public void EveningMotion()
    {
        IDateTimeProvider dateTimeProvider = new MockDateTimeProvider(new DateTime(2018, 1, 1, 20, 0, 0));
        ILightHardwareInterface frontyardLights = new MockLightHardwareInterface();
        MockLightHardwareInterface backyardLights = new MockLightHardwareInterface();

        LightController controller = new LightController(dateTimeProvider, frontyardLights, backyardLights);
        controller.ActuateLights(true);

        IReadOnlyCollection<bool> actualResult = backyardLights.GetRecording();
        List<bool> expectedResult = new List<bool>
        {
            true
        };

        CollectionAssert.AreEqual(expectedResult, actualResult);
    }

要做什么?如果可能的话,我有点想保持预期结果和实际结果的比较,而不是逐个元素地迭代。

【问题讨论】:

  • String.Join 并比较字符串?
  • 您是在使用特定的断言库还是只是 MS 使用的默认库?另外,Core 还是什么框架版本?
  • @matti 只是内置的单元测试的东西。 VS 2015 上的框架 4.5。
  • 即使他们都是List&lt;T&gt;,这种方法也行不通。循环遍历并比较它们,或者更好地执行 icepickle 上面的建议。
  • @ChristopherPisz 改用new List&lt;bool&gt;(actualResult) 或添加using System.Linq

标签: c#


【解决方案1】:

您可以将 CollectionAssert 用于集合。

CollectionAssert.AreEqual(expectedResult, actualResult);

【讨论】:

  • 无法从 IReadOnlyCollection 转换为 System.Collections.ICollection
  • IReadOnlyCollection 结果的具体类型是什么?如果是 System.Collections.ObjectModel.ReadOnlyCollection,可以强制转换为 ICollection。
  • 这样就解决了问题。附带问题,是通过 CollectionAssert.AreEqual(expectedResult, (ICollection)actualResult);打字安全吗?我认为这类似于 C++ 中的重新解释(我仍然是 C# 菜鸟),如果安全的话,会有一个“as”方法。
猜你喜欢
  • 2013-01-06
  • 2020-08-25
  • 1970-01-01
  • 1970-01-01
  • 2023-03-20
  • 1970-01-01
  • 2021-06-16
  • 2020-07-07
  • 1970-01-01
相关资源
最近更新 更多