VS 2008 # если условный акт для юнит-тестирования - PullRequest
1 голос
/ 09 октября 2008

Существует ли условный оператор, похожий на «#if DEBUG», который можно использовать в VS 2008 для определения, запускается ли код из модульного теста? (Мы используем встроенное модульное тестирование MS.)

Например:

#if !UNITTEST

// Do some GUI stuff we don't want to see when unit testing

#endif

Ответы [ 5 ]

1 голос
/ 09 октября 2008

Спасибо. Подход, который я планировал использовать, - это избегание использования кода, специфичного для модульных тестов, но его заставили посмотреть на этот маршрут в случае его существования. Теперь я не буду этого делать! :)

1 голос
/ 09 октября 2008

Я согласен с комментариями, в которых говорится, чтобы вообще не делать этого, но я делал это в прошлом сам. IIRC, он использовался для переключения между «базой данных модульных тестов» (то есть, выбрасыванием) и «базой данных тестов с полезными данными в них», которая была случайно стерта модульными тестами слишком много раз ...

Наше решение состояло в том, чтобы иметь класс UnitTestDetector (или что-то в этом роде), который имел бы единственное статическое свойство "InUnitTest". Это будет определяться тем, был ли загружен NUnit в текущем домене приложения (опять же, IIRC). После первого исследования результат будет кэширован, чтобы предотвратить снижение производительности.

1 голос
/ 09 октября 2008

Условный оператор, о котором вы говорите, недоступен, потому что это директива компилятора; Вам понадобится тестовая сборка, в которой вы сможете определить свою собственную директиву компилятора TEST. Однако, как отметили комментаторы - вы не должны запускать другой код для теста, чем в производственной среде, это не соответствует цели.

0 голосов
/ 16 октября 2008

+ 1 за ответ Криса. Это звучит как хорошее место для класса "Test Fake" или "Test Double". Можете ли вы извлечь графический интерфейс, который вы хотите скрыть, в виртуальные или абстрактные методы, а затем создать (в своем тестовом проекте) класс, который наследуется от тестируемого класса и переопределяет код графического интерфейса?

0 голосов
/ 09 октября 2008

Обратите внимание, что любое такое определение имеет смысл только во время компиляции. Следовательно, вам придется скомпилировать его одним способом, чтобы получить код, и другим способом удалить этот код. Итак, ваш код будет "ощущать", что он запускается платформой модульного тестирования. Вам понадобятся две отдельные сборки. Если это действительно то, что вы хотите, достаточно легко определить символ. Просто перейдите в Свойства проекта, вкладка «Сборка» и добавьте «UNITTEST» в разделе Условные символы компиляции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...