Как вы можете использовать «внешние» файлы конфигурации (т.е. с configSource) с проектом модульного тестирования MSTest? - PullRequest
11 голосов
/ 30 сентября 2008

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

Ответы [ 3 ]

11 голосов
/ 30 сентября 2008

Нашли:

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

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

10 голосов
/ 12 марта 2009

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

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

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

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

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

1 голос
/ 13 февраля 2017
  1. напишите это в вашей строке подключения. Первый 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 в указанном месте. и успешно работает.

enter image description here

...