2010-12-21 43 views
1

我已經四處查看了,並且無法完全弄清楚這一點,而我的大量嘗試和錯誤嘗試都是無用的。Nunit對於集合之間的空白交叉點的斷言

我的用戶名(我們稱之爲「原單」)一個對象返回 我的用戶名列表(我們稱之爲「過濾列表」)另一個目的是返回

列表

我正在測試一個方法,它返回原始列表中不在過濾列表中的所有項目。

理想情況下我要的是像

Assert.That(returnedList, Has.No.Members.In(filtrationList)) 

到目前爲止,我唯一可以做的事情是遍歷filtrationList做

Assert.That(returnedList, Has.None.EqualTo(filteredUser)) 

回答

2

隨着NUnit的,你可以創建自定義的任何約束。 如果你想驗證路口兩個集合,你可以這樣創造的東西:

public class Intersects : CollectionConstraint 
{ 
    private IEnumerable _collection2; 

    public Intersects(IEnumerable collection2) 
     : base(collection2) 
    { 
     _collection2 = collection2; 
    } 

    public static Intersects With(IEnumerable arg) 
    { 
     return new Intersects(arg); 
    } 

    protected override bool doMatch(IEnumerable collection) 
    { 
     foreach (object value in collection) 
     { 
      foreach (object value2 in _collection2) 
       if (value.Equals(value2)) 
        return true; 
     } 

     return false; 
    } 

    public override void WriteDescriptionTo(MessageWriter writer) 
    { 
     //You can put here something more meaningful like items which should not be in verified collection. 
     writer.Write("intersecting collections"); 
    } 
} 

用法很簡單:

string[] returnedList = new string[] { "Martin", "Kent", "Jack"}; 
List<string> filteredUsers = new List<string>(); 
filteredUsers.Add("Jack"); 
filteredUsers.Add("Bob"); 
Assert.That(returnedList, Intersects.With(filteredUsers)); 
+0

我創建了一個類「IsDisjointSet」與翻轉doMatch邏輯和流利方法 public static IsDisjointSet ComparisonTo(IEnumerable arg) with – AndyM 2013-02-05 09:34:35