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

StackOverflow https://stackoverflow.com/questions/152866

  •  02-07-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

Нашел это:

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

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

Другие советы

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

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

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

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

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

  1. напишите это в вашей строке подключения.Первый Строка подключения.config не существует.

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

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

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

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

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

enter image description here

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top