MSTest - лучший способ определить или указать, выполняется ли тест на устройстве разработчика или на компоновщике - PullRequest
1 голос
/ 11 августа 2010

Существует ли встроенный способ определения, выполняется ли тест на компьютере разработчика (в Visual Studio) или на сборщике (в среде выполнения MSTest)? Если нет, кто-нибудь нашел хорошее решение для этого?

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

Я рассмотрел #if, но это кажется хакерским. Есть лучшие решения?

Ответы [ 4 ]

3 голосов
/ 11 августа 2010

Я успешно использую переменные окружения и условная компиляция . MSBuild может легко переводить переменные окружения в символы препроцессора, которые вы можете использовать в своем коде. Ваш MSBuild-файл должен содержать такой перевод:

<PropertyGroup Condition="'$(ENVIRONMENT_VARIABLE)' != '' ">
    <DefineConstants>$(DefineConstants);ENVIRONMENT_VARIABLE</DefineConstants>
</PropertyGroup>

То, что делает этот фрагмент, проверяет наличие ENVIRONMENT_VARIABLE, а затем добавляет эту переменную в существующий список DefineConstants, который указывает MSBuild, какие символы определить для компиляции.

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

По возможности избегайте этого.

2 голосов
/ 11 августа 2010

Когда мне пришлось заставить модульные тесты вести себя по-разному на сборочной машине в отличие от машин-разработчиков, я использовал Environment.MachineName, чтобы определить, является ли машина сервером сборки или нет. Не знаю, будет ли это вам полезно.

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

1 голос
/ 11 августа 2010

Вы можете использовать любое количество локальных настроек в поле dev, которые не будут присутствовать в официальных сборках или тестовых блоках, и прочитать их, чтобы определить, нужно ли вам переключаться на специфическое поведение dev-box.Например, файл, XML-файл, раздел реестра, директива препроцессора (как вы упомянули).

Как предложил Роберт Харви, настройки приложения - это еще один способ сделать это.

0 голосов
/ 11 августа 2010

Вы можете использовать настройку приложения .

...