2013-03-08 5 views
1

В настоящее время я пытаюсь прочитать строку подключения из App.config в приложении WinForms из моей библиотеки классов (и модульного тестирования).Чтение строки подключения из библиотеки классов

Я добавил «тест» на App.config;

<connectionStrings> 
    <add name="MyConnString" connectionString="Test;" /> 
</connectionStrings> 

My TestMethod выглядит так;

[TestMethod] 
    public void TestConnection1() 
    { 
     string connString = ""; 

     if (ConfigurationManager.ConnectionStrings["MyConnString"] != null) 
     { 
      connString = ConfigurationManager.ConnectionStrings["MyConnString"].ConnectionString; 
     } 

     string expected = "Test;"; 
     string actual = connString; 

     Assert.AreEqual(expected, actual); 
    } 

Это, очевидно, терпит неудачу. Значение Actual пусто. Что я делаю неправильно?

enter image description here

+0

Ожидает подтверждения == Действительный возвращает true? –

+0

См. Изображение, которое я добавил в нижней части вопроса. Фактическое значение равно "", ожидаемое значение равно "Test;". – Roel

+0

Будет что-то вроде этой работы 'string connString = config.ConnectionStrings.ConnectionStrings [0] .ConnectionString;' – MethodMan

ответ

1

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

+0

Итак, вы хотите, чтобы я добавил строку «Строка подключения» к моему проекту Unit Testing? Я слышал, что не лучше всего использовать App.config в библиотеке классов или проекте Unit Testing. – Roel

+1

да, вы должны, ничего плохого в добавлении его в проект модульного тестирования, и требуется, чтобы он имел конфигурацию при тестировании этого конкретного сценария, а ya, если вы добавляете конфигурацию в библиотеку классов, это бесполезно. – paragy

+0

Отлично. Благодарю. Я не знал, что мне пришлось копировать «App.config» в Unit Testing, чтобы он работал. – Roel

1

Что касается вашего комментария к DJ Kraze:. "@DJ Kraze, если я ставлю 0 в качестве индекса, он возвращает мне ConnectionString для SQLExpress„ASPNETDB.mdf“Если я ставлю 1 в качестве индекса, я получаю исключение (IndexOutOfRangeException), поэтому, очевидно, моя строка не найдена. "

Проблема в том, что вы забыли элемент конфигурации. Например:

Реферировано из MSDN: Storing and Retrieving Connection Strings

<?xml version='1.0' encoding='utf-8'?> 
    <configuration> 
    <connectionStrings> 
     <clear /> 
     <add name="Name" 
     providerName="System.Data.ProviderName" 
     connectionString="Valid Connection String;" /> 
    </connectionStrings> 
    </configuration> 

Файл machine.config содержит также <connectionStrings> раздел, который содержит строки соединения, используемые в Visual Studio. При извлечении строк подключения по имени поставщика из файла app12config в приложении Windows сначала загружаются строки подключения в machine.config, а затем записи из app.config. Добавление очистки сразу после того, как элемент connectionStrings удаляет все унаследованные ссылки из структуры данных в памяти, так что учитываются только строки соединения, определенные в файле app.config.

Смежные вопросы