Ответ 1
Это может быть одна из нескольких проблем:
- Вы не добавили app.config в проект ProjectTest.
-
Вы не добавили строку подключения в свой app.config.
Я пытаюсь написать 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 - это то, что я установил в строку конфигурации адаптера данных, и возвращает нулевую ошибку в тестах, но не тогда, когда я действительно использую веб-сайт. Любые идеи?
Это может быть одна из нескольких проблем:
Вы не добавили строку подключения в свой app.config.
Вы выполняете unit test, а в unit test ваша концентрация должна быть конкретным методом, который пытается проверить и должен удалять посторонние зависимости. в этом случае попробуйте насмешку /moleing (используйте Microsoft Mole и Pex) system.configuration
class; что даст решение наверняка.
То, что я говорю, после установки MS moles-and-pex → в вашем решении тестового проекта → щелкните правой кнопкой мыши сборку системы и выберите create mole.
Это даст вам молевую версию класса конфигурации, которая, в свою очередь, будет иметь издеваемую версию configuration class
- с помощью которой вы можете обойти проблему, с которой вы сталкиваетесь.
Он связан с параметром /noisolation в командной строке mstest.exe. Опуская параметр /noisolation, он работает.
Вы также можете использовать специальные пути конфигурации с помощью 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);