对集合使用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

签名是

   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

相关文章:
  • 没有找到相关文章