#c# #unit-testing #nunit
Вопрос:
У меня есть несколько модульных тестов. Подобный этому:
[TestFixture]
public class Tests
{
[SetUp]
public void Setup()
{
}
}
Но похоже, что это почти тот же код. Можно ли написать это короче?
Я использую платформу тестирования NUnit.
И это код:
public class Parcel
{
//Some code
}
Теперь это работает
Ответ №1:
Вы можете использовать TestCase вместо атрибута Test для запуска одного и того же тестового кода с разными данными, например
[TestCase(0.02m, "Name: parcel - Postal code 2582Cd - Weight 0,02 - Value 0,0 - Department Mail")]
[TestCase(2m, "Name: parcel - Postal code 2582Cd - Weight 2 - Value 0,0 - Department Regular")]
public void ParcelsWithSpecificWeightShouldBeSpecificToString(decimal weight, string expected)
{
var parcel = new Parcel { Name="parcel", PostalCode = "2582Cd", Weight = weigth, Value = 0.0m };
Assert.AreEqual(expected, parcel.ToString());
}
Но на самом деле вы тестируете Department
свойство, поэтому я бы рекомендовал не тестировать parcel.ToString()
, а parcel.Department
:
[TestCase(0.02m, "Mail")]
[TestCase(2m, "Regular")]
public void ParcelsWithSpecificWeightShouldBeSpecificDepartment(decimal weight, string expected)
{
var parcel = new Parcel { Name="parcel", PostalCode = "2582Cd", Weight = weigth, Value = 0.0m };
Assert.AreEqual(expected, parcel.Department);
}
Комментарии:
1. Да, но также и ценность. И в одном тестовом примере это смешанная версия: так что вес и ценность.
Ответ №2:
Если вы пытаетесь уменьшить количество строк в своих методах тестирования, вы можете выполнить инициализацию посылки в Setup() как parcel1, parcel2….parcelN.
Однако при этом все равно будет использоваться то же количество строк кода, что и при вашей текущей настройке, просто это будет выходить за рамки методов тестирования. Честно говоря, дальнейшую оптимизацию 2 линейных методов нелегко оптимизировать.