如何测试返回的数组包含至少一个具有特定属性值的值

时间:2010-10-18 02:53:38

标签: c# asp.net unit-testing

说我有一个我想测试的方法:

public Cars[] GetCars();

我想测试一下这个方法返回的数组至少包含一辆“Mustang”类型的车。

我怎么会这样做?

目前我的代码如下:

[Test]
public void GetCars_ReturnsMustangs()
{
   Cars[] cars = GetCars();

   foreach(Car car in cars)
   {
      Assert.IsTrue(Car.Type == "Mustang");
   }
}

虽然这可以作为一个测试,据我所知,我知道在测试中放置循环不是一个好主意吗?

有人可以提出更好的选择吗?

谢谢!

4 个答案:

答案 0 :(得分:4)

Linq会成为一个选择

using System.Linq

[Test]
public void GetCars_ReturnsMustangs()
{
   Cars[] cars = GetCars();
   Assert.IsTrue(cars.Any(c => c.Type == "Mustang"));
}

<强>编辑:

这是一篇很棒的文章,介绍何时使用Count()与何时使用Any()

http://blogs.teamb.com/craigstuntz/2010/04/21/38598/

答案 1 :(得分:3)

这样的事情可以解决问题,只需确保添加“使用System.Linq;”

[Test]
public void GetCars_ReturnsMustangs()
{
    Cars[] cars = GetCars();
    Assert.IsTrue(cars.Where(c => c.Type == "Mustang").Count() > 0);
}

(该代码尚未针对语法错误进行测试,但应该可以正常工作)

修改:根据@ John的评论将.Count() > 0替换为.Any()

答案 2 :(得分:3)

怎么样:

Assert.IsTrue(cars.Any(c => c.Type == "Mustang"));

答案 3 :(得分:1)

使用Gallio/MbUnit,您可以使用Assert.Exists

Assert.Exists(cars, x => x.Type == "Mustang");