Как вы можете использовать "внешние" файлы конфигурации (т.е. С помощью 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 в указанном месте. и успешно работает.
![введите описание изображения здесь]()