Как вы можете использовать "внешние" файлы конфигурации (т.е. С помощью configSource) с проектом MSTest unit test?

Для простоты я обычно разделяю большую часть своей конфигурации (т.е. содержимое 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", как вы думаете), похоже, что они никогда не могут найти эти внешние файлы в то время как тесты выполняются. Я попытался возиться с действиями post build, чтобы сделать эту работу, но не повезло. Есть ли способ, чтобы эти внешние файлы копировались в правильную папку вывода во время выполнения?

Ответ 1

Найдено:

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

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

Ответ 2

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

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

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

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

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

Ответ 3

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

    < "connectionStrings configSource =" ConnectionString.config " > "

  • откройте командную строку (CMD) в привилегированном режиме администратора.

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

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

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

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