Как использовать web.config при модульном тестировании приложения asp .net - PullRequest
70 голосов
/ 05 февраля 2009

Я начинаю с модульного тестирования, у меня есть метод, который использует web.config для строки подключения.

Я надеялся, что смогу использовать

[DeploymentItem("web.config")]

, чтобы получить файл веб-конфигурации, это все еще оставляет меня с нулевыми ссылочными исключениями (для этого я и буду писать мой следующий тест).

Как использовать файл конфигурации, включенный в проект, который я пытаюсь протестировать?

Я использую среду тестирования, включенную в VS 2008, если это что-то меняет.

Спасибо

Ответы [ 6 ]

98 голосов
/ 05 февраля 2009

Проекты модульного тестирования должны иметь свой собственный файл конфигурации.

В тестовом проекте вы можете выбрать Добавить, Новый элемент, Файл конфигурации приложения.

Этот файл будет вести себя точно так же, как web.config, но для ваших юнит-тестов.

12 голосов
/ 08 мая 2014

Вы можете загрузить файл web.config или app.config из любого места, используя OpenMappedExeConfiguration. Убедитесь, что System.Configuration добавлен в список ссылок вашего проекта.

ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap()
fileMap.ExeConfigFilename = @"c:\my-web-app-location\web.config"

Configuration config = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None);
string connectionString = config.AppSettings.Settings["ConnectionString"].Value;

Вот web.config, довольно стандартный.

<?xml version="1.0"?>
<configuration>
  <configSections>
  </configSections>
  <appSettings>
    <add key="ConnectionString" value="Data Source=XXXX;Initial Catalog=XXX; Trusted_Connection=True;"/>
  </appSettings>
</configuration>

Обновление на 2017-09-29

Я придумал класс, чтобы было проще читать AppSetitngs из файла. Я получил идею от Zp Bappi .

public interface IAppSettings
{
    string this[string key] { get; }
}

public class AppSettingsFromFile : IAppSettings
{
    readonly Configuration Config;

    public AppSettingsFromFile(string path)
    {
        var fileMap = new ExeConfigurationFileMap();
        fileMap.ExeConfigFilename = path;
        Config = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None);
    }

    public string this[string key]
    {
        get
        {
            return Config.AppSettings.Settings[key].Value;
        }
    }
}

Вот как использовать класс.

IAppSettings AppSettings = new AppSettingsFromFile(@"c:\my-web-app-location\web.confg");
string connectionString = AppSettings["ConnectionString"];
7 голосов
/ 05 августа 2011

Скопируйте файл web.config в папку "/ bin" и переименуйте его в "AppName.dll.config".

Где "AppName" - имя полученной сборки.

Я использовал этот хак много раз.

4 голосов
/ 05 февраля 2009

Вы хотите, чтобы ваши результаты были четкими и повторяемыми. Для этого вам необходимо работать с известными данными, чтобы вы могли четко определить как ваши обычные случаи, так и ваши граничные случаи. В моей работе это всегда определенный сервер и набор данных, поэтому в модуле модульного тестирования встроена строка подключения. Другие предпочитают использовать строку подключения из проекта модульного тестирования. Я никогда не видел, чтобы кто-нибудь рекомендовал использовать конфигурационный файл веб-сайта! (разработка или иное)

2 голосов
/ 26 апреля 2015

Я бы порекомендовал абстрагировать часть чтения конфигурации, чтобы ее можно было смоделировать. Примерно так: см. Ответ Jon_Lindeheim Как читать файл Web.Config при отладке модульного теста?

1 голос
/ 05 февраля 2009

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

Для модульного теста вы захотите изолировать свой код от вашей базы данных. Измените свои тесты (и код, который вы тестируете при необходимости), чтобы вам не нужно было обращаться к базе данных для их тестирования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...