Я недавно обновился до NUnit 2.5 (да, я знаю), и мне было интересно, смогу ли я выбрать чей-то мозг с этим.
У меня есть много тестов, которые выглядят так:
[Test]
public void TestTheSpecialDict() {
int start = 0;
int end = 44;
Dictionary<int, string> = SomeFunction(start, end);
Assert.That(dict1.Count > 0);
// Alright now, some funky values
start = -1;
end = -34;
Dictionary<int, string> dict2 = SomeFunction(start, end);
Assert.That(dict2.Count == 0);
}
Таким образом, этот специальный тест гарантирует, что SomeFunction
возвращает пустой словарь, когда диапазон недопустим, например, вместо нуля.
Теперь я обнаружил атрибут [TestCase(...)]
в 2.x,О, МОЙ БОГ!Поэтому я хочу, чтобы мой тест выглядел так:
[TestCase(0, 44)]
[TestCase(-1, -34)]
public void TestTheSpecialDict(int start, int end) {
/* ... */
}
Отлично.Проблема здесь, конечно, заключается в том, что второй Assert не проходит в первом тестовом примере, а первый Assert не выполняется во втором.Очевидно, это ожидаемое поведение, поскольку start
и end
имеют область действия метода и применяются к обеим операциям.Не удивительно.
Исправить это не проблема:
- Разбейте контрольные примеры на два разных метода.Дублирование кода и, на самом деле, TestCase было бы отчасти излишним.
- Добавить дополнительный параметр тестового примера (например, последовательное значение) и обусловить вызовы Assert на его основе.Много работы, учитывая количество тестов, которые у меня есть.
- Что-то еще, чего у меня нет.
Есть ли "более чистый" способ?Я просмотрел NUnit.Framework
и не вижу ничего, что позволило бы мне сделать это бегло Полагаю.Поэтому мне интересно, есть ли кто-нибудь, кто имел этот тип "устаревшей" структуры UT с NUnit 1.x и как они мигрировали, используя преимущества новых функций.