断言IEnumerables

由于我们公司没有使用unit testing,我正在教自己对我自己的代码进行unit testing。 我正在使用标准的.net测试框架进行一些非常基本的unit testing。

我的方法返回一个IEnumerable ,我想测试它的输出。 所以我创建了一个IEnumerable期望对它进行测试。 我以为我记得有一种方法可以使用Assert.ArePartsEqual或类似的东西,但我似乎无法找到它。

简而言之,我如何测试两个IEnumerable包含相同的字符串?

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

你的测试将是这样的:

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

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

您需要SequenceEqual()扩展方法(LINQ):

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

要不就:

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

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

我有一个例子,我用于“在60分钟内实现LINQ to Objects”谈话。

它也在我的MoreLinq项目中。 试图在这里开始它,它包裹得非常糟糕。 从Github抓起 ……