2009-03-04 3 views
4

Я пытаюсь объединить тестовые значения, которые в конечном итоге попадут в файл web.config. В моем тестовом проекте я создал файл app.config с секцией web.config, чтобы сохранить настройки. В обычной ситуации я бы назвал System.Configuration.ConfigurationSettings.AppSettings, но в этом случае это не сработает. Я видел this question, который очень похож, но не решает, как получить NameValueCollection из конфигурационного файла. Ниже приведен пример файла конфигурации:Получить значения из раздела web.config в файле app.config?

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <system.web> 
     <membership defaultProvider="CustomMembershipProvider"> 
     <providers> 
      <clear/> 
      <add 
      name="CustomMembershipProvider" 
      applicationName="SettlementInfo" 
      enablePasswordRetrieval="false" 
      enablePasswordReset="false" 
      requiresQuestionAndAnswer="true" 
      writeExceptionsToEventLog="true" /> 
     </providers> 
     </membership> 
    </system.web>  

</configuration> 

С кем-нибудь это делалось раньше?

ответ

3

Наверное, я здесь смущен; похоже, вы пытаетесь проверить, что ASP.NET использует ваш пользовательский поставщик членства соответствующим образом. Верный?

Если да, то я 99.999% уверен, что вы не можете тестировать устройство с использованием среды MS; вам необходимо выполнить интеграцию, проверив его, развернув его на веб-сервере (или запустив Cassini в VS) и введя имя пользователя/пароль на свою страницу входа.

Теперь, возможно, я неправильно понял ваш запрос. Если да, дайте мне знать, и я отредактирую свой ответ соответственно.

Edit:

Для прямо сейчас, я действительно просто пытается протестировать пары имя-значение выходит конфигурационного файла, чтобы убедиться, что если значения нет , применяются мои значения по умолчанию. В других словах , я хочу попытаться потянуть имя приложения и убедиться, что оно равно «SettlementInfo» и т. Д. После этого я буду использовать тестирование интеграции , чтобы убедиться, что ASP.NET использует настраиваемую фреймворк вместо стандартного. Значит ли это, что ?

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

Если это так, вам повезло; вам совсем не нужен app.config или web.config, вы можете установить нужные вам значения как часть вашей тестовой настройки.

Например:

[TestMethod] 
public void Test_Configuration_Used_Correctly() 
{ 
    ConfigurationManager.AppSettings["MyConfigName"] = "MyConfigValue"; 
    MyClass testObject = new MyClass(); 
    testObject.ConfigurationHandler(); 
    Assert.AreEqual(testObject.ConfigurationItemOrDefault, "MyConfigValue"); 
} 

[TestMethod] 
public void Test_Configuration_Defaults_Used_Correctly() 
{ 
    // you don't need to set AppSettings for a non-existent value... 
    // ConfigurationManager.AppSettings["MyConfigName"] = "MyConfigValue"; 

    MyClass testObject = new MyClass(); 
    testObject.ConfigurationHandler(); 
    Assert.AreEqual(testObject.ConfigurationItemOrDefault, "MyConfigDefaultValue"); 
} 
+0

На данный момент я просто пытаюсь проверить пары NameValue, выходящие из файла конфигурации, чтобы убедиться, что, если значения отсутствуют, применяются мои значения по умолчанию. Другими словами, я хочу попытаться вытащить имя приложения и убедиться, что он равен «SettlementInfo» и т. Д. –

+0

После этого я буду использовать интеграционное тестирование, чтобы гарантировать, что ASP.NET использует пользовательскую структуру вместо стандартной. Имеет ли это смысл? –

+0

См. Мои изменения для ответа. Я все еще не могу понять, с чем вы это делаете, но если это то, что я думаю, это должно начать вас в правильном направлении. – Randolpho

0

Почему бы не просто вставить его в файл web.config?

+0

Я в библиотеке классов для модульного тестирования, поэтому я использую app.config. Как только я доберусь до добавления в свой веб-проект, он войдет в web.config. –

+0

Есть ли способ ссылаться на файл web.config из библиотеки классов? –

1

Вы должны быть в состоянии использовать метод ConfigurationManager.GetSection(), чтобы вытащить все, что вы хотите.

+0

Я пробовал ConfigurationManager.GetSection() в разделах system.web и членства. Оба возвращают null. Я делаю что-то неправильно? –

2

Я считаю, что у вас есть только доступ к файлу webconfig, пока ваше приложение фактически запущено. Решение довольно просто -> «Подделать» ваш конфиг. Используйте NameValueCollection и использовать это вместо того, чтобы:

private static NameValueCollection CreateConfig() 
{ 
NameValueCollection config = new NameValueCollection(); 
    config.Add("applicationName", "TestApp"); 
    config.Add("enablePasswordReset", "false"); 
    config.Add("enablePasswordRetrieval", "true"); 
    config.Add("maxInvalidPasswordAttempts", "5"); 
    config.Add("minRequiredNonalphanumericCharacters", "2"); 
    config.Add("minRequiredPasswordLength", "6"); 
    config.Add("requiresQuestionAndAnswer", "true"); 
    config.Add("requiresUniqueEmail", "true"); 
    config.Add("passwordAttemptWindow", "10"); 

    return config; 
} 

Теперь вы можете легко передать эту коллекцию в своем классе, который анализирует данные из него.

1

На самом деле, если вы используете NUnit, вы можете придерживаться этого в App.config в своем тестовом проекте. Затем добавьте эту строку в случае после сборки:

копия/Y «$ (ProjectDir) App.config» «$ (TargetDir) $ (TargetFileName) .config»

При создании нового поставщика в ваших тестах NUnit передаст значения в app.config поставщику в методе инициализации.

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

  • Нет связанных вопросов^_^