Obter caminho do projeto referenciado durante o teste de unidade

Eu tento testar a funcionalidade de uma class no meu webapplication (ASP.Net), usando testes de unidade. Esta class carrega alguns arquivos do disco rígido (para executar transformações xsl):

Xsl = GetXSLFromFile(AppDomain.CurrentDomain.BaseDirectory + "\XML Transformationen\Transformation_01.xslt") 

Esse caminho é resolvido corretamente durante a debugging do próprio aplicativo da web. Mas sempre que eu inicio o teste de unidade (que reside em um projeto de teste separado, referenciando o projeto do webapplication), eu obtenho o caminho do projeto de teste.

É possível obter o caminho do aplicativo da Web nesse cenário ou devo usar uma abordagem diferente? Quaisquer sugestões são apreciadas.

Atenciosamente, Kai Hartmann

Eu sugiro que você faça algo assim:

 public class MyXslFileLoader { public void Load() { Load(AppDomain.CurrentDomain.BaseDirectory + "\XML Transformationen\Transformation_01.xslt"); } public void Load(string path) { Xsl = GetXSLFromFile(path); } } 

Você chamaria Load() em seu aplicativo da web, mas usaria a versão sobrecarregada desse método em seu aplicativo unittest. Você pode considerar adicionar o arquivo xslt como um recurso ao seu projeto.

Você seria capaz de carregar o caminho assim:

 var webApplicationDllPath = Path.GetDirectoryName(typeof(ClassInTheWebApplicationDll).Assembly.GetName().CodeBase); 
 string path; path = System.IO.Path.GetDirectoryName( System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase ); 

COMO: Determinar o caminho do aplicativo em execução

Obtendo o caminho de um arquivo executável em c #

Espero que isso seja útil .. 🙂

Ok, isso deu a dica: Um projeto de teste de unidade pode carregar o arquivo app.config do aplicativo de destino?

No arquivo .testsettings, adicionado pelo projeto de teste ao meu projeto webapplication, posso adicionar arquivos e pastas que devem ser copiados para a pasta de debugging de projetos de teste sempre que o teste for executado.

Então, depois disso, posso referenciar os arquivos xsl por AppDomain.CurrentDomain.BaseDirectory.

Além disso, para manter também a estrutura de pastas, tive que fazer o que foi descrito aqui: Projeto de teste do Visual Studio – não copia pasta na implantação

Eu tive que editar o arquivo .testsettings com um editor de texto e adicionar o parâmetro outputDirectory. Depois disso, reiniciei o Visual Studio e, quando iniciei o projeto de teste, a pasta e os arquivos foram copiados corretamente.