Контроль потока в тестах
Я всегда находил что-то кроме самой базовой логики в тестах плохой идеей. Тесты должны быть как можно более декларативными. Если вы указываете, каков результат, а не как его достичь, у него есть несколько преимуществ:
Во-первых, тестовый код обычно намного проще (примечание: «проще» здесь не всегда означает «терзатель», это просто означает, что намерение проще вывести и выполнить.)
Во-вторых, значительно усложняет логику тестируемой системы. Если вы проверяете тестируемую систему, у вас может быть ошибка в рабочем коде, соответствующая ошибка в тестовом коде и ... прохождение теста. Две неудачи и ложное чувство безопасности.
Библиотеки тестирования
Если у вас есть общие вспомогательные типы тестов в библиотеке, на которую вы полагаетесь, вполне логично, если у них есть логика , пока вы их тестируете! Пример: до добавления данных в NUnit 2.5 до тестируя, мы создали нашу собственную функциональность тестирования на основе данных и использовали ее довольно часто. Код, управляемый данными, сам по себе имел тесты для проверки его правильного функционирования. На мой взгляд, все, что вы используете для проверки правильности, должно быть изучено даже больше, чем обычно. Вы бы не хотели строить на чем-то, что дает ошибочные результаты, не так ли? :)
Кроме того, подумайте о самой NUnit. Посмотрите на его код. Практически все, что вы используете и на что рассчитываете - от самого бегуна до тонкостей - тщательно проверено на правильность. Я считаю целесообразным следовать тем же правилам для своих собственных библиотек тестов.