Pergunta

Eu estou tentando valores de teste de unidade que eventualmente acabam em um arquivo web.config. No meu projeto de teste, eu criei um arquivo app.config com uma seção web.config para manter as configurações. Em uma situação normal, eu chamaria System.Configuration.ConfigurationSettings.AppSettings, mas, neste caso, que não funciona. Vi esta questão , que é muito semelhante, mas não aborda como obter o NameValueCollection fora do arquivo de configuração. Aqui está um exemplo do arquivo de configuração:

<?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>

Qualquer pessoa tem lidado com isso antes?

Foi útil?

Solução

Eu acho que estou confuso aqui; parece que você está tentando testar que ASP.NET está usando seu provedor de associação personalizado de forma adequada. Corrigir?

Se assim for, estou 99,999% de certeza que você não pode teste de unidade esta usando a estrutura MS; Você deve testar a integração isso implementando-o para o servidor web (ou correr Cassini em VS) e digitando um nome de usuário / senha em sua página de login.

Agora, é possível que eu tenha entendido mal o seu pedido. Se assim for, deixe-me saber e eu vou editar a minha resposta em conformidade.

Editar:

Por agora, estou realmente tentando para testar os pares NameValue saindo do arquivo de configuração, para se certificar de que Se os valores não estiverem presentes, o meu padrões estão a ser aplicadas. em outra palavras, eu quero tentar puxar applicationName, e verificar que ele é igual a "SettlementInfo", e assim por diante. Depois disso, eu vou estar usando integração testes para garantir que ASP.NET está usando a estrutura personalizada em lugar do padrão. Será que isso faz sentido?

Eu preciso de mais do que um comentário para responder, então eu estou editando. Se eu ler corretamente, você está querendo teste de unidade o seu programa para garantir que se trata de configuração corretamente, sim? Ou seja, você quer garantir que a sua disputa de código, por exemplo, a chave AppSettings corretas e alças um valor nulo nele, correto?

Se for esse o caso, você está na sorte; você não precisa de um app.config ou web.config em tudo, você pode definir os valores que você precisa como parte de sua configuração de teste.

Por exemplo:

[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");
}

Outras dicas

Eu acredito que você só tem acesso ao arquivo webconfig enquanto o aplicativo é realmente beeing iniciado. A solução é bastante fácil -> "Falso" sua configuração. Use um NameValueCollection e utilizá-lo:

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;
}

Agora você pode facilmente passar essa coleção em sua classe que analisa dados a partir dele.

Você deve ser capaz de usar a ConfigurationManager. GetSection () método para retirar o que quiser.

Na verdade, se você estiver usando NUnit, você pode furar que em um App.config em seu projeto de teste. Em seguida, adicione esta linha ao seu evento Post-Build:

copiar / Y “$ (ProjectDir) App.config” “$ (TargetDir) $ (TargetFileName) .config”

Quando você cria o novo provedor em seus testes, NUnit vai passar os valores no seu app.config para o provedor no método initialize.

Por que não colocá-lo no arquivo web.config?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top