Имеет ли смысл делать класс модульного теста статическим?

Я использовал NDepend в своей кодовой базе, и хотя мой фактический код, кажется, проходит с честью, мой код модульного теста может потребовать много работы. Одним из предложений, сделанных NDepend, было преобразование многих моих классов модульных тестов в статические классы из-за высокой степени разделения между тестами. Похоже, что это может помочь не делиться состоянием между тестами и позволить им работать в любом порядке. Должен ли я преобразовать свои классы модульных тестов в статические классы?

Совместное использование состояния между методами тестирования в одном и том же TestFixture и, конечно же, между TestFixture


person Peter Smith    schedule 27.02.2012    source источник
comment
Будет ли ваша среда модульного тестирования работать со статическими тестовыми классами (версия MS не работает)?   -  person Hans Kesting    schedule 27.02.2012
comment
Когда вы говорите, что это может помочь не использовать совместное состояние между тестами, вы имеете в виду классы TestFixture или методы Test в одном и том же TestFixture?   -  person Sam Goldberg    schedule 27.02.2012
comment
Я бы вообще не запускал NDepend в вашем тестовом проекте. Я запускаю NDepend только для производственного кода, а не для тестового кода.   -  person Steven    schedule 27.02.2012
comment
Как предположил Стивен, правила NDepend в настоящее время предназначены для выполнения в производственном коде. Эта ситуация изменится в течение 2012 года. Патрик из команды NDepend   -  person Patrick from NDepend team    schedule 28.02.2012


Ответы (2)


Интригующий! Я никогда раньше не видел, чтобы кто-нибудь применял анализ NDepend для тестовых проектов. Хотя модульные тесты следует рассматривать как первоклассные граждане вашей кодовой базы, они обычно не развертываются вместе с приложением и, как таковые, не рассматриваются с теми же архитектурными ограничениями (FxCop, NDepend и т. д.). На каком-то уровне я согласен с этим подходом, качество тестов необходимо проверять, но я не вижу, какую пользу инструмент может предоставить здесь, кроме выявления проблем с сопряжением классов, которые также будут идентифицированы в рабочем коде.

Что касается NUnit, он обычно создает один экземпляр testfixture для всех тестовых методов в этом тестовом классе. Состояние распределяется между тестами, и это хорошо и плохо.

Хорошо: состояние, для создания которого требуется время, можно настроить при настройке тестового прибора.

Плохо: состояние, которое должно быть сброшено между тестами, зависит от вас, чтобы исправить его между тестами.

Если NUnit поддерживает статические методы для тестов и если вам нужно какое-либо состояние в тестовом приспособлении, эти поля должны быть статическими. Это на самом деле очень страшно, потому что состояние ваших тестов совместно используется на протяжении всего срока службы тестового домена приложения.

Ключевым моментом является использование атрибутов NUnit для фиксации и инициализации/снятия тестов. Никогда не используйте конструкторы или финализаторы для инициализации фикстуры, поскольку вы не можете контролировать, когда инфраструктура NUnit создает ваш класс.

person bryanbcook    schedule 28.02.2012

Если ваши тесты не нужно запускать в определенном порядке или они не зависят от кода инициализатора, вы можете сделать их статическими.

Однако помните, что это не рецепт успеха.

person linkerro    schedule 27.02.2012