Как проверить возвращаемый массив содержит хотя бы одно значение с определенным значением свойства - PullRequest
2 голосов
/ 18 октября 2010

скажем, у меня есть метод, который я хочу проверить:

public Cars[] GetCars();

Я хочу проверить, что массив, возвращаемый этим методом, содержит по крайней мере одну машину типа "Mustang".

Как бы я на самом деле это сделал?

В настоящее время у меня есть код вроде:

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

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

Хотя это работает как тест, насколько я могу судить, я знаю, что это не хорошоИдея поставить петли внутри теста?

Кто-нибудь может предложить лучшую альтернативу?

Спасибо!

Ответы [ 4 ]

4 голосов
/ 18 октября 2010

Будет ли 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/

3 голосов
/ 18 октября 2010

А как же:

Assert.IsTrue(cars.Any(c => c.Type == "Mustang"));
3 голосов
/ 18 октября 2010

Что-то вроде этого должно сработать, просто обязательно добавьте "using System.Linq;"

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

(этот код не был проверен на синтаксические ошибки, но должен работать нормально)

Редактировать: Заменить .Count() > 0 на .Any() за @ комментарий Джона

1 голос
/ 18 октября 2010

С Gallio / MbUnit вы можете использовать Assert.Exists:

Assert.Exists(cars, x => x.Type == "Mustang");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...