Quando crio um projeto de teste de unidade antes da execução dos testes, a saída do teste é copiada para uma pasta TestResults e, em seguida, os testes são executados. O problema que estou tendo é que nem todos os arquivos no diretório Debug / bin são copiados para o projeto TestResults.
Como posso obter um arquivo que é copiado para o diretório Debug / bin e também para a pasta TestResults?
c#
.net
visual-studio-2008
unit-testing
mstest
Eric Schoonover
fonte
fonte
Você pode especificar o atributo de implantação como um exemplo mostrado abaixo; Além disso, você precisa definir a propriedade "Conteúdo" e "Copiar se for mais recente" (não há documentação nas configurações posteriores, mas você as definiu para fazê-lo funcionar.
fonte
Eu tive que ativar "Ativar implantação" em
Test -> Edit Test Settings -> Local -> Deployment
para que o[DeploymentItem]
atributo funcione.fonte
Todas as três respostas estão corretas, dependendo de suas necessidades.
Adicionando arquivos para implantar no .testrunconfig (.testsettings no VS2010) copiará todos esses arquivos para todas as pastas de saída de teste, mesmo para testes não relacionados executados isoladamente. Se você executar um teste, todos os arquivos de dados de teste listados na seção de implantação de .testssettings serão copiados para a pasta de saída de teste.
Nos meus testes, eu preciso copiar um arquivo XML esperado para a pasta de saída de teste para comparar com o XML real de saída de teste. Eu uso o atributo DeploymentItem para copiar apenas o arquivo XML relacionado aos testes que estão sendo executados. No VS2010, eu tive que ativar a implantação no arquivo .testsettings (mas não adicionar nenhum caminho) e, em seguida, referenciar o caminho do arquivo XML relativo ao TestProject no DeploymentItem.
Espero que isto ajude.
fonte
Eu tive um problema semelhante, mas o meu tinha a ver com apontar para o arquivo TraceAndTestImpact.testsettings em vez do arquivo Local.testsettings. Você pode mudar de um para outro no menu Testar / Selecionar configurações de teste ativas.
fonte
Gostaria apenas de aprimorar a resposta aceita, mencionando uma maneira de implementá-la especificamente para dll, em vez do método normal de usá-lo para dados ou configurações, etc., nas circunstâncias em que o CopyLocal não funciona:
fonte
O seguinte funciona no VS2012 para projetos de teste incluídos em várias soluções sem usar um arquivo de configurações de teste:
1) Organize os arquivos e pastas que deseja implantar em uma pasta no diretório do projeto de teste.
2) Nas propriedades do projeto, crie uma etapa de pós-compilação
$(ProjectDir)
e$(TargetDir)
são macros que serão interpretadas pelo VS e devem ser incluídas como tal.<Project_Folder_Name>
é o nome da pasta criada na etapa 1.<Deployment_Folder_Name>
é o nome da pasta na qual os arquivos de teste serão implantados e devem ser nomeados para que sejam exclusivos quando vários projetos de teste forem implantados no mesmo diretório, por exemplo<Project_Name>_TestInputs
.Os arquivos de teste em locais compartilhados também devem ser copiados para a pasta de implantação do diretório de destino para limitar as interações de teste. Forneça o caminho de origem em relação à
$(ProjectDir)
macro. Por exemplo"$(ProjectDir)..\..\Common Files\C1219TDL-2008.xml"
.3) Adicione um
[DeploymentItem(source, destination)]
propriedade a cada método de teste que use um arquivo de implantação (prática recomendada) ou à classe de teste (prática mais fácil para preguiçosos ou apressados e a maneira mais fácil de atualizar um projeto os caminhos relativos usados anteriormente ou um arquivo de configurações de teste )Em um método de teste,
source
é o caminho para o arquivo ou diretório usado no método de teste em relação ao diretório de destino criado peloxcopy
edestination
é o caminho para o diretório no qual ele será criado em relação ao diretório de implantação. Para que os testes sejam executados de maneira consistente no diretório de destino ou no diretório de implantação. O caminho de destino deve ser o mesmo que o caminho de origem sem uma referência de arquivo. Exemplo:[DeploymentItem("Example_TestInputs\C1219TDL-2008.xml","Example_TestInputs")]
. ADeploymentItem
deve ser incluído em cada método que usa esse arquivo ou diretório.Em uma classe
source
edestination
são o nome da pasta criada no diretório de destino peloxcopy
; isso copiará a pasta inteira para o diretório de implantação quando qualquer teste da classe for executado. Exemplo:[DeploymentItem("Example_TestInputs","Example_TestInputs")]
4) Nos métodos de teste, agora você pode acessar arquivos e diretórios com confiança de que eles estarão no diretório de trabalho, independentemente de onde o Visual Studio tenha decidido colocá-lo naquele dia, por exemplo
File.Exists(".\Example_TestInputs\C1219TDL-2008.xml")
.fonte
Experimente a linha de comando do evento Pós-Compilação no Visual Studio (se você estiver usando esse IDE).
fonte
No Visual Studio 2012, você não precisa de um atributo DeploymentItem para o caso simples. Veja minha resposta aqui
fonte
fonte
A resposta aceita está correta e a maioria das outras respostas também. No entanto, ao longo dos anos, descobri que o sistema Deploment dos testes de unidade do Visual Studio usando DeploymentAttribtue e Copy to Output é complicado se você tiver um grande número de arquivos de dados. Descobri que manter os arquivos em seu local original funcionava melhor.
Detalhes completos na minha outra resposta aqui. https://stackoverflow.com/a/53004985/2989655
Espero que isto ajude.
fonte