Como você pode usar arquivos de configuração “externos” (ou seja, com configSource) com um projeto de teste de unidade MSTest?

StackOverflow https://stackoverflow.com/questions/152866

  •  02-07-2019
  •  | 
  •  

Pergunta

Para simplificar, eu geralmente dividir um monte de minha configuração (isto é, o conteúdo de app.config e web.config) para fora em ficheiros.config separados e, em seguida, referenciá-los do principal arquivo de configuração usando o atributo 'configSource'. Por exemplo:

<appSettings configSource="appSettings.config"/>

e, em seguida, colocar todos os pares de chave / valor no arquivo appSettings.config em vez de ter isso em linha no arquivo de configuração principal:

<appSettings>
    <add key="FirstKey" value="FirstValue"/>
    <add key="SecondKey" value="SecondValue"/>
    ...
</appSettings>

Isso normalmente funciona muito bem com o próprio aplicativo, mas eu me deparo com problemas ao tentar testes de unidade de gravação que, por qualquer motivo, necessidade de obter em algum valor a partir de uma seção de configuração que é armazenado em um desses arquivos externos. (Eu entendo que a maioria destes seria likley ser considerados "testes de integração", como eles estão contando com o sistema de configuração, e eu tenho "testes de unidade puros", bem como, mas esses são o não o problema. Eu realmente estou procurando para testar se esses valores de configuração são recuperadas corretamente e comportamento impacto da maneira correta).

Devido à forma como MSTest compila e copia a saída para pastas ofuscado aparência que são diferentes de cada teste (em vez de para a pasta 'bin' como se poderia pensar), nunca parece ser capaz de encontrar esses arquivos externos enquanto que os testes são de execução. Eu tentei mexer com ações de construção pós para fazer este trabalho, mas sem sorte. Existe uma maneira de ter esses arquivos externos copiado para a pasta de saída correta em tempo de execução?

Foi útil?

Solução

A ele:

Se você editar a configuração de execução de teste (clicando duas vezes no arquivo .testrunconfig que será colocado na pasta solução dos Itens solução "quando você adicionar um novo teste de unidade), você recebe uma caixa de diálogo de configuração de execução de teste. Há uma seção lá chamado 'Implantação', onde você pode especificar arquivos ou pastas inteiras de qualquer lugar na solução que pode ser copiado para fora com os conjuntos compilados em tempo de execução para a pasta correta.

Desta forma, agora eu posso realmente apenas definir a maioria da minha configuração em um conjunto de ficheiros.config externos e tê-los copiado automaticamente para fora no prazo de cada teste.

Outras dicas

configurações de execução de teste são um pouco estranho quando se tenta executar testes fora do Visual Studio.

Para a execução linha de comando usando MSTest eles se tornam bastante complicado para manter "limpa". Eles também são "global" para a solução de modo arquivos externos serão copiados para cada projeto de teste.

Eu prefiro muito mais o atributo DeploymentItem.

[TestMethod]
[DeploymentItem(@"test_data.file")]
public void FooTest()
{...}

Faz os testes independentes dos arquivos .testrunconfig.

  1. escrever isso no seu connectionString. Primeiro ConnectionString.config não é existe.

    < "connectionStrings configSource =" ConnectionString.config ">"

  2. aberto comando prompt de (CMD) em administrador privilegiado.

  3. Criar um links simbólicos com o nome de pasta ConnectionString.config no bin / debug.

C: \ Windows \ systems32> mklink "C:\Link To Folder\....\ConnectionString.config" "C:\Users\Name\Original Folder\.....\...\Secure ConnectionString.config"

finalmente, ele cria ConnectionString arquivo de configuração no local especificado. e funciona com êxito.

enter descrição da imagem aqui

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