2016-11-25 6 views
0

В настоящее время я работаю над проектом решения шаблонов для разработки расширяемых служб Windows.Не удается найти ConnectionString для NUnit в Connections.config

В моей службы Windows C# проекта (ServiceTemplate) У меня есть файл App.config, который содержит следующее:

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <configSections> 
     <section name="nlog" type="NLog.Config.ConfigSectionHandler, NLog"/> 
    </configSections> 
    <startup> 
     <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/> 
    </startup> 
    <connectionStrings configSource="Connections.config"/> 

    <!-- NLog Settings --> 
    <nlog> 
     <targets> 
     <target name="programlog" type="File" fileName="${basedir}/Logs/program-logs/program-log${shortdate}.log" layout="${logger} - [${longdate}] [${level}] -> ${message} (${callsite} @ line ${callsite-linenumber})" /> 
     <target name="servicelog" type="File" fileName="${basedir}/Logs/service-logs/service-log${shortdate}.log" layout="${logger} - [${longdate}] [${level}] -> ${message} (${callsite} @ line ${callsite-linenumber})" /> 
     <target name="tasklog" type="File" fileName="${basedir}/Logs/task-logs/task-log${shortdate}.log" layout="${logger} - [${longdate}] [${level}] -> ${message} (${callsite} @ line ${callsite-linenumber})" /> 
     <target name="checkinlog" type="File" fileName="${basedir}/Logs/checkin-logs/checkin-log${shortdate}.log" layout="${logger} - [${longdate}] [${level}] -> ${message} (${callsite} @ line ${callsite-linenumber})" /> 
     <target name="databaselog" type="File" fileName="${basedir}/Logs/database-logs/database-log${shortdate}.log" layout="${logger} - [${longdate}] [${level}] -> ${message} (${callsite} @ line ${callsite-linenumber})" /> 
     <target name="unittestlog" type="File" fileName="${basedir}/Logs/unittest-logs/unittest-log${shortdate}.log" layout="${logger} - [${longdate}] [${level}] -> ${message} (${callsite} @ line ${callsite-linenumber})" /> 
     </targets> 
     <rules> 
     <logger name="ProgramLog" writeTo="programlog"/> 
     <logger name="ServiceLog" writeTo="servicelog"/> 
     <logger name="TaskLog" writeTo="tasklog"/> 
     <logger name="CheckInLog" writeTo="checkinlog"/> 
     <logger name="DatabaseLog" writeTo="databaselog"/> 
     <logger name="UnitTestLog" writeTo="unittestlog" /> 
     </rules> 
    </nlog> 
</configuration> 

У меня также есть два отдельных C# проектов библиотеки (ServiceTemplateDAL и ServiceTemplateLibrary) в пределах того же решения, содержит мои модели и DAL и где большая часть работы выполняется.

Я создал четвертый проект в моем решении под названием ServiceTemplateUnitTesting, который я использую для написания набора модульных тестов с помощью NUnit. Моя проблема: NUnit не может найти файл Connections.config.

Я сделал несколько поисковых запросов и знаю, что вам нужно переименовать конфигурационный файл в имя сборки. Поэтому я попытался скопировать файл ServiceTemplate.exe.config и поместить его в bin/Debug/из проекта ServiceTemplateUnitTesting под названием ServiceTemplateUnitTesting.dll.config и запустить тесты, но он по-прежнему не может читать файл connections.config.

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

Спасибо!

ответ

0

Мне удалось разобраться с проблемой самостоятельно. В моем случае у меня было два файла .config; как в моем проекте службы Windows, так и в приложении App.config, а другой - в Connections.config.

Мои строки подключения были скрыты в Connections.config, чтобы убедиться, что они не были включены в исходный код, но все еще доступны приложению.

Решение должно было взять файл App.config из проекта «ServiceTemplate» и переименовать его в «ServiceTemplateUnitTesting.dll.config» и поместить его в папку проекта/bin/debug в ServiceTemplateUnitTesting. Наряду с этим я также разместил копию файла Connections.config в папке/bin/debug в «ServiceTemplateUnitTesting». После этого загруженная тестовая DLL-библиотека NUnit смогла прочитать мой оригинальный файл App.config.

Это может быть хорошей идеей добавить функцию post build к решению xcopy файла конфигурации из вашего стартового приложения и переименовать его в тестовую сборку и поместить ее в тестовую сборку/bin/debug.

0

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

Поэтому nunit устанавливает конфигурационный файл для вашей тестовой сборки AppDomain на имя вашей тестовой dll + «.config». NUnit ничего не делает с этим конфигурационным файлом - он его не читает, поэтому NUnit не сможет каким-то образом перейти по ссылке на второй файл конфигурации. Только среда выполнения .NET и ваша тестовая сборка сами знают или могут получить доступ к этой конфигурации.