【发布时间】: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<T>,这种方法也行不通。循环遍历并比较它们,或者更好地执行 icepickle 上面的建议。 -
@ChristopherPisz 改用
new List<bool>(actualResult)或添加using System.Linq
标签: c#