2009-02-13 73 views
18

由于我们公司没有使用单元测试,我正在自学单元测试自己的代码。 我正在使用标准的.net测试框架进行一些非常基本的单元测试。断言IE编号

我的一个方法返回IEnumerable<string>,我想测试它的输出。 因此,我创建了一个IEnumerable<string>预计将对其进行测试。 我以为我记得有一种方式Assert.ArePartsEqual或类似的东西,但我似乎无法找到它。

总之,如何测试两个IEnumerable<string>是否包含相同的字符串?

+1

+1对于良好的态度和敬业精神:) – 2009-02-13 11:57:47

+0

他:P这是一个初级程序员可以得到的更好的赞美之一;) – 2009-02-13 12:31:30

回答

23

我不知道你指的是哪个“标准.net测试框架”,但如果它是Visual Studio Team System Unit测试的东西,你可以使用CollectionAssert

你的测试将是这样的:

CollectionAssert.AreEqual(ExpectedList, ActualList, "..."); 

更新:我忘了CollectionAssert需要一个ICollection接口,所以你必须调用ActualList.ToList()来得到它的编译。返回IEnumerable是一件好事,所以不要仅仅为了测试而改变它。

11

你想要SequenceEqual()扩展方法(LINQ):

string[] x = { "abc", "def", "ghi" }; 
    List<string> y = new List<string>() { "abc", "def", "ghi" }; 

    bool isTrue = x.SequenceEqual(y); 

或者只是:

bool isTrue = x.SequenceEqual(new[] {"abc","def","ghi"}); 

(如果它们是不同的长度,或任何项目不同,它会返回false)

+0

所以要将它翻译成单元测试的东西,我可以去Assert.IsTrue(结果。 SequenceEqual(预期)); 这不提供一个有用的消息,但它让我在那里,所以没关系。 – 2009-02-13 12:35:35

+0

@boris:将我的(目前基于NUnit的)代码翻译成MS版本真的很容易。然后你会收到一个好消息。 – 2009-02-13 12:39:17

5

我有一个我用于“在60分钟内实现LINQ到对象”的例子。

它也在我的MoreLinq项目中。在这里尝试过,它包裹得非常糟糕。只是grab from Github ...