2009-01-07 57 views
50

您好我是新來的TDD和的xUnit,所以我想測試我的方法是這樣的:xUnit:斷言兩個列表<T>是否相等?

List<T> DeleteElements<T>(this List<T> a, List<T> b); 
當然,這不是真正的方法:) 的

有沒有我可以使用任何斷言方法?我認爲這樣會很好

List<int> values = new List<int>() { 1, 2, 3 }; 
    List<int> expected = new List<int>() { 1 }; 
    List<int> actual = values.DeleteElements(new List<int>() { 2, 3 }); 

    Assert.Exact(expected, actual); 

有沒有這樣的事情?

回答

59

xUnit.Net識別集合,所以你只需要做

Assert.Equal(expected, actual); // Order is important 

你可以看到其他可用的集合斷言在CollectionAsserts.cs

對於NUnit的圖書館藏書比較方法是

CollectionAssert.AreEqual(IEnumerable, IEnumerable) // For sequences, order matters 

and

CollectionAssert.AreEquivalent(IEnumerable, IEnumerable) // For sets, order doesn't matter 

更多細節在這裏:CollectionAssert

MbUnit的也有類似NUnit的集合斷言:Assert.Collections.cs

+1

源代碼鏈接已修改http://xunit.codeplex.com/SourceControl/changeset/view/d947e347c5c3#Samples%2fAssertExamples%2fCollectionExample.cs – 2010-09-07 12:26:35

+1

評論中的新鏈接也被打破。 – 2013-02-23 17:46:38

27

在的xUnit的當前版本(1.5),你可以只使用

Assert.Equal(預計,實際);

上面的方法將通過兩個列表的元素比較來做一個元素。 我不確定這是否適用於任何以前的版本。

6

有了xUnit,如果你想櫻桃挑選每個元素的屬性來測試你可以使用Assert.Collection。

Assert.Collection(elements, 
    elem1 => Assert.Equal(expect1, elem1.SomeProperty), 
    elem2 => { 
    Assert.Equal(expect2, elem2.SomeProperty); 
    Assert.True(elem2.TrueProperty); 
    }); 

這測試預期的計數並確保每個操作都被驗證。