Здравствуйте, Andir, Вы писали:
A>>при том что с локальными функциями можно поставить точку останова на строчку с нужным тестом?
A>Я тоже не понял особо зачем параметризованные тесты нужны, ведь набор провалившихся тестов с проблемами в разных частях диапазона — это лучше, чем один провалившийся тест на все диапазоны сразу (или может там на атрибутах построена особая магия, которая выдаёт нарушения диапазона значений сразу по всем атрибутам?).
С параметризованными тестами мы как раз и увидим набор пробвалившихся тестов в разных частях диапазона, а не один провалившийся тест. При этом с отладкой тоже все нормально, тот же решарпер позволяет запускать и отлаживать конкретный тест-кейс параметризованного теста.
A>Приведённый выше пример страдает той же проблемой — провалится один тест, а проблем внутри может быть сразу много. Да и отлаживать тесты — это то ещё кощунство.
Вот именно эта проблема и решается параметризованными тестами!
Следующий тест:
[TestCase("(-Inf,+Inf)", Result = true)]
[TestCase("[0,1.5)", Result = true)]
[TestCase("(0,0)", Result = false)]
[TestCase("[0,-1.12)", Result = false)]
[TestCase("(Inf,-Inf]", Result = false)]
[TestCase(null, Result = false, ExpectedException = typeof(ArgumentNullException))]
public bool Test_Interval_Validity(string range)
{
try
{
Interval.Parse(range);
return true;
}
catch (FormatException)
{
return false;
}
}
Тест-раннером разворачивается в 6 (!) независимых тест-кейсов, каждый из которых запускается независимо:
И если один из тест-кейсов упадет, то мы увидим в точности то, что упало:
Так что по-сути, параметризованные тесты — это такой себе простенький язык для генерации множества тест-кейсов, что вручную получить практически невозможно!