2012-03-28 77 views
5

我想寫類似:對集合使用CollectionAssert.Contains

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 > 

是否有可能使用含有方法對另一集合?

回答

4

簽名是

CollectionAssert.Contains (ICollection collection, Object element) 

而且它會檢查是否element(單數)是內collection
這不是檢查子列表的方法。

你或許應該使用:

CollectionAssert.IsSubsetOf (ICollection subset, ICollection superset) 
+0

基督我需要一些眼鏡! – Jon 2012-03-28 09:23:09

2

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); 
1

同樣的功能,不同的語法(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)); 
0

使用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