Как написать Nunit TestCases для проверки правильности Список строк возвращается - PullRequest
1 голос
/ 02 августа 2011

У меня есть такой метод:

public virtual IList<string> Validate()
{
   ...
}

Я хочу провести модульное тестирование с помощью NUnit.Это часть Транспортного средства класса.

A Vehicle может быть разных типов, т.е.Car Boat Truck и т. Д.

В верхней части моего TestFixture я настроил VehicleTypes:

private VehicleType[] _vehicleTypes;

[SetUp]
public void MyTestInitialize()
{
    transScope = new TransactionScope();

    var boat= new VehicleType { Name = "boat" };
    var car = new VehicleType { Name = "car" };
    var truck = new VehicleType { Name = "truck" };

    _vehicleTypes= new VehicleType[] { boat, car, truck };

    ...
}

Я хочу проверить, чтоСообщение об ошибке отправляется обратно из метода только для лодки.

Мой модульный тест выглядит следующим образом:

[TestCase(0, "This vehicle is inappropriate because it doesn't have wheels")]
[TestCase(1, null)]
[TestCase(2, null)]
public void Validate_Vehicle_ReturnsAppropriateErrorMessage(int vehicleType, string expectedResult)
{
   var vehicle = new Vehicle { VehicleType = _vehicleTypes[vehicleType] };

   var results = vehicle.Validate();

   string result;

   if (results.Count == 0)
      result = null;
   else
      result = results[0];

   Assert.IsTrue(expectedResult == result);
}

Так вот как я пытался проверить его с помощью TestCases.Однако я не уверен, что это правильный подход, поскольку модульные тесты не должны содержать ifs?

Также, возможно, это странный подход к написанию теста для различных типов?

Кто-нибудьесть лучшие предложения?

1 Ответ

6 голосов
/ 02 августа 2011

Я бы разбил их на несколько тестов.Таким образом, вы можете написать тот, который проверяет нормальное поведение (не лодка), а также лодка.Если в будущем какой-либо из этих тестов окажется неудачным, вам не придется пытаться выяснить, какая итерация тестов, управляемых данными, не удалась.Тест говорит сам за себя.

В этом случае я бы написал один для поведения для лодки и один для не лодки.Другие итерации неинтересны (и аналогично используют тот же путь кода, который этот тест проверяет, как и другие, не являющиеся шлюзами)

public void Validate_VehicleIsBoat_ReturnsAppropriateErrorMessage()
{   
   string expectedResult = "This vehicle is inappropriate because it doesn't have wheels";
   var vehicle = new Vehicle { VehicleType = VehicleType.Boat };  //or whatever it is in your enum

   var results = vehicle.Validate();   

   Assert.AreEqual( expectedResult, results[0] );
}

public void Validate_VehicleIsNotBoat_DoesNotReturnErrorMessage()
{   
   var vehicle = new Vehicle { VehicleType = VehicleType.Car };  //or whatever it is in your enum

   var results = vehicle.Validate();   

   Assert.IsNull( results ); // or whatever the no error message case is. Will results[0] have an empty string?
}

Вы можете добавить дополнительные тесты, чтобы проверить, что наборы результатов имеют все необходимые данныеа также.

В любом случае, надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...