对集合使用CollectionAssert.Contains
本文关键字:CollectionAssert Contains 集合 | 更新日期: 2023-09-27 18:29:18
我想写这样的东西:
var list = new List<int>(){1,2,3};
var bigList = new List<int>(){1,2,3,4,5,6,7,8,9};
CollectionAssert.Contains(bigList, list);
我可以得到一个类似的错误:
Expected: collection containing < 1,2,3 >
But was: < 1,2,3,4,5,6,7,8,9 >
是否可以对另一个集合使用contains方法?
签名是
CollectionAssert.Contains (ICollection collection, Object element)
并且它检查element
(单数)是否在collection
内部
这不是检查子列表的方法。
您可能应该使用:
CollectionAssert.IsSubsetOf (ICollection subset, ICollection superset)
来自MSDN
使用CollectionAssert.IsSubsetOf
:
var list = new List<int>(){1,2,3};
var bigList = new List<int>(){1,2,3,4,5,6,7,8,9};
CollectionAssert.IsSubsetOf(list, bigList);
相同的功能,不同的语法(NUnit的约束风格,更接近自然语言,这是一个良好测试的质量):
var list = new List<int>(){1,2,3};
var bigList = new List<int>(){1,2,3,4,5,6,7,8,9};
Assert.That( list, Is.SubsetOf( bigList ) );
使用CollectionAssert.IsSubsetOf(list, bigList)
的目的通常是查看列表中哪些项未包含在bigList中。测试list
中的所有项目都包含在bigList
中,只返回true或false,这并没有给我任何错误的调试信息。我希望测试失败,并提供哪些项目不在bigList
中的信息。
所以对我来说,我总是将语句CollectionAssert.IsSubsetOf(list, bigList)
转换为
var list = new List<int>(){0,1,2,3,9}; // note the 0 and 9 is added to the list
var bigList = new List<int>(){1,2,3,4,5,6,7,8};
CollectionAssert.IsEmpty(list.Except(bigList));
这给出了的结果
Expected <empty>
But was: <0, 9>
换句话说,list
包含0和9,它们不包含在bigList
中