Невозможно использовать ConfigurationManager внутри Unit Test Project - программирование

Невозможно использовать ConfigurationManager внутри Unit Test Project

Я пытаюсь написать unit test для моего проекта, но он не позволит мне использовать Configuration Manager. Прямо сейчас мой проект настроен как

Приложение ASP.Net(все страницы aspx)

ProjectCore (все файлы С# - модель)

ProjectTest (все тесты)

в моем ProjectCore, я могу получить доступ к объекту ConfigurationManager из System.Configuration и передать информацию в проект. Однако, когда я запускал тест, в котором задействован ConfigurationManager, я получаю сообщение об ошибке

System.NullReferenceException: Object reference not set to an instance of an object.

Вот пример теста

using System.Configuration;

[TestMethod]
public void TestDatabaseExists()
{
    //Error when I declare ConfigurationManager
    Assert.IsNotNull(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString
}

в моих других тестах ConfigurationManager.ConnectionStrings [ "ConnectionString" ]. ConnectionString - это то, что я установил в строку конфигурации адаптера данных, и возвращает нулевую ошибку в тестах, но не тогда, когда я действительно использую веб-сайт. Любые идеи?

4b9b3361

Ответ 1

Это может быть одна из нескольких проблем:

  • Вы не добавили app.config в проект ProjectTest.
  • Вы не добавили строку подключения в свой app.config.

        

Ответ 2

Вы выполняете unit test, а в unit test ваша концентрация должна быть конкретным методом, который пытается проверить и должен удалять посторонние зависимости. в этом случае попробуйте насмешку /moleing (используйте Microsoft Mole и Pex) system.configuration class; что даст решение наверняка.

То, что я говорю, после установки MS moles-and-pex → в вашем решении тестового проекта → щелкните правой кнопкой мыши сборку системы и выберите create mole.

Это даст вам молевую версию класса конфигурации, которая, в свою очередь, будет иметь издеваемую версию configuration class - с помощью которой вы можете обойти проблему, с которой вы сталкиваетесь.

Ответ 3

Он связан с параметром /noisolation в командной строке mstest.exe. Опуская параметр /noisolation, он работает.

Ответ 4

Вы также можете использовать специальные пути конфигурации с помощью ExeConfigurationFileMap:

// Get the machine.config file.
ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap();
// You may want to map to your own exe.config file here.
fileMap.ExeConfigFilename = @"C:\test\ConfigurationManager.exe.config";
// You can add here LocalUserConfigFilename, MachineConfigFilename and RoamingUserConfigFilename, too
System.Configuration.Configuration config = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None);