C # - исключая юнит-тесты из релизной версии вашего проекта - PullRequest
22 голосов
/ 17 сентября 2008

Как вы обычно занимаетесь разделением вашей кодовой базы и связанных модульных тестов ? Я знаю людей, которые создают отдельный проект для модульных тестов, который лично меня смущает и трудно поддерживать. С другой стороны, если вы смешаете код и его тесты в одном проекте, вы получите двоичные файлы, связанные с вашей структурой модульного тестирования (будь то NUnit, MbUnit или что-то еще) и ваши собственные двоичные файлы рядом.

Это хорошо для отладки, но как только я создаю релизную версию , я действительно не хочу, чтобы мой код ссылался на среду модульного тестирования .

Одно решение, которое я нашел, - заключить все ваши модульные тесты в директивы #if DEBUG - #endif: когда ни один код не ссылается на сборку модульного тестирования, компилятор достаточно умен, чтобы опустить ссылку в скомпилированном коде.

Существуют ли другие (возможно, более удобные) варианты для достижения аналогичной цели?

Ответы [ 13 ]

0 голосов
/ 08 июля 2009

Если тег # if (DEBUG) допускает чистую «релизную» версию, зачем вам нужен отдельный проект для тестов. Пример nunit LibarryA / B (да, я знаю его пример) делает это. В настоящее время борюсь со сценарием. Если бы я использовал отдельный проект, но это, возможно, позволяет некоторые улучшения производительности. Все еще хуммин и хавин.

0 голосов
/ 17 сентября 2008

Я всегда создаю отдельный проект Acme.Stuff.Test, который компилируется отдельно.

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

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

0 голосов
/ 17 сентября 2008

Я определенно согласен со всеми остальными, что вы должны отделить тесты от своего производственного кода. Однако, если вы настаиваете на этом, вам следует определить условную константу компиляции, называемую TEST, и обернуть все ваши классы модульных тестов

.
#if TEST
#endif

сначала убедитесь, что тестовый код не компилируется в производственном сценарии. Как только это будет сделано, вы сможете либо исключить тестовые библиотеки из своего производственного развертывания, либо, что еще лучше (но с более высоким уровнем обслуживания), создать NAnt или MSBuild для производства, которые компилируются без ссылок на тестовые библиотеки.

...