Как вы можете использовать внешние файлы конфигурации (например, с configSource) с проектом модульного тестирования MSTest?

Для простоты я обычно разбиваю большую часть своей конфигурации (то есть содержимое app.config и web.config) на отдельные файлы .config, а затем ссылаюсь на них из основного файла конфигурации с помощью атрибута configSource. Например:

<appSettings configSource="appSettings.config"/>

а затем поместите все пары ключ / значение в этот файл appSettings.config вместо того, чтобы иметь это в строке в основном файле конфигурации:

<appSettings>
    <add key="FirstKey" value="FirstValue"/>
    <add key="SecondKey" value="SecondValue"/>
    ...
</appSettings>

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

Из-за того, как MSTest компилирует и копирует выходные данные в запутанные папки, которые отличаются от каждого тестового запуска (а не в папку bin, как вы могли подумать), похоже, что он никогда не сможет найти эти внешние файлы во время тестов выполняются. Я пробовал возиться с действиями пост-сборки, чтобы заставить эту работу, но безуспешно. Есть ли способ скопировать эти внешние файлы в правильную папку вывода во время выполнения?


person Jesse Taber    schedule 30.09.2008    source источник


Ответы (3)


Нашел:

Если вы отредактируете конфигурацию тестового запуска (дважды щелкнув файл .testrunconfig, который помещается в папку решения «Элементы решения» при добавлении нового модульного теста), вы получите диалоговое окно конфигурации тестового запуска. Там есть раздел под названием «Развертывание», где вы можете указать файлы или целые папки из любого места в решении, которые можно скопировать вместе со скомпилированными сборками во время выполнения в нужную папку.

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

person Jesse Taber    schedule 30.09.2008
comment
Обратите внимание, что следующий файл был переименован между VS2008 и VS2010: localtestrun.testrunconfig (.NET v3.5) и Local.testsettings (.NET v4.0): social.msdn.microsoft.com/Forums/en/vststest/thread/ - person Ubikuity; 11.05.2012

Конфигурации тестового запуска немного неудобны при попытке запустить тесты вне Visual Studio.

Для выполнения из командной строки с использованием MSTest они становятся довольно громоздкими, чтобы оставаться «чистыми». Они также являются «глобальными» для решения, поэтому внешние файлы будут копироваться для каждого тестового проекта.

Я предпочитаю атрибут DeploymentItem.

[TestMethod]
[DeploymentItem(@"test_data.file")]
public void FooTest()
{...}

Делает тесты независимыми от файлов .testrunconfig.

person Community    schedule 12.03.2009

  1. напишите это в своем connectionString. Первый ConnectionString.config не существует.

    ‹" ConnectionStrings configSource = "ConnectionString.config"> "

  2. открыть командную строку (CMD) с правами администратора.

  3. Создайте символические ссылки с именем ConnectionString.config в папке bin / debug.

C: \ Windows \ Systems32> mklink "C:\Link To Folder\....\ConnectionString.config" "C:\Users\Name\Original Folder\.....\...\Secure ConnectionString.config"

наконец, он создает файл конфигурации ConnectionString в указанном месте. и успешно работает.

введите описание изображения здесь

person Ghebrehiywet    schedule 13.02.2017