2011-11-10 8 views
8

Estoy tratando de ejecutar MSTest.exe, y parece que TestContainer no se está leyendo correctamente; mientras que todas mis pruebas se ejecutan correctamente en todos los entornos de configuración dentro de Visual Studio.¿MSTest.exe no copia todas las DLL de proyecto necesarias?

el comando que estoy usando es:

"C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\MSTest.exe" /nologo /usestderr /testSettings:"C:\temp\MyProject\Sources\MyProject\Local.testsettings" /searchpathroot:"C:\temp\MyProject\Binaries" /resultsfileroot:"C:\temp\MyProject\TestResults" /testcontainer:"C:\temp\MyProject\Binaries\MyProject.Services.Server.UnitTests.dll" 

Las referencias del proyecto dentro del proyecto testcontainer este aspecto:

<ItemGroup> 
    <ProjectReference Include="..\..\Services\MyProject.Services.Server\MyProject.Services.Server.csproj"> 
     <Project>{92EC1999-CC0C-47DD-A4D6-17C3B1233C50}</Project> 
     <Name>MyProject.Services.Server</Name> 
    </ProjectReference> 
    <ProjectReference Include="..\..\SvcConfiguration\MyProject.ServiceConfiguration.Interfaces\MyProject.ServiceConfiguration.Interfaces.csproj"> 
     <Project>{8E2E7BA9-75DB-458E-A184-AC1030EAD581}</Project> 
     <Name>MyProject.ServiceConfiguration.Interfaces</Name> 
    </ProjectReference> 
    <ProjectReference Include="..\..\SvcConfiguration\MyProject.ServiceConfiguration.Services\MyProject.ServiceConfiguration.Services.csproj"> 
     <Project>{39514766-23A8-45DB-96EA-B6B4D9C8B086}</Project> 
     <Name>MyProject.ServiceConfiguration.Services</Name> 
    </ProjectReference> 
</ItemGroup> 

Ni los ServiceConfiguration.Interfaces ni el ServiceConfiguration.Services DLL se coloca en la carpeta Out en TestResults.

Los GUID de proyecto coinciden entre las referencias y los proyectos a los que se hace referencia.

¿Hay algo que me falta en la línea de comandos?

+0

no he encontrado la opción "/ searchpathroot" en el [Documentación] (http://msdn.microsoft.com/en-us/library/ms182489 (v = vs.100) .aspx). – Andreas

Respuesta

6

MSTest.exe no Coy todas las DLL que se hace referencia se refieren: http://www.dotnetthoughts.net/2011/11/22/mstest-exe-does-not-deploy-all-items/

+4

Por lo general, soluciono esto haciendo un método en AssemblyInit.cs de la unidad dll de prueba donde hago explícitamente llamadas ficticias a aquellos dll: s que lo necesitan (típicamente plugins tipo dll: s ya que no son explícitamente llamados desde el código probado en sí). –

+0

El enlace está roto. – Xena

4

Se puede especificar exactamente qué archivos se copian en el directorio de prueba utilizando un archivo de configuración de la prueba . Puede crear varios archivos de configuración de prueba en Visual Studio, de modo que puede tener uno para ejecutar desde VS, otro para ejecutar desde MSTest, otro para las compilaciones de CI del servidor, y así sucesivamente. Consulte aquí para obtener más información: Create Test Settings to Run Automated Tests from Visual Studio

Utilice la opción /testsettings:<filename> para especificarlo en la línea de comando.

Lo que al principio parece confundir a las personas es que, de forma predeterminada, el "directorio actual" de MSTest no es el directorio de inicio de MSTest, sino la carpeta de salida de los resultados de la prueba.

Como se mencionó anteriormente, MSTest no infiere correctamente todos los conjuntos utilizados, si no tiene una referencia directa, no copiará el conjunto. Dicho esto, Visual Studio también tiene un comportamiento similar en su construcción, por lo que muchas personas lo solucionan añadiendo referencias de código falsas, una solución terrible. No lo recomiendo.

Sin embargo, las DLL nativas son incluso más problemáticas, y he encontrado que copiarlas explícitamente en la configuración de prueba (configuración de prueba) funciona para ellas, al igual que para los ensamblados administrados.

+0

¿Cómo configuraría estas DLL nativas en la configuración de prueba? – sebas2day

1

Ya sea que salga o el área de construcción dependa de diferentes factores, sin embargo, para las situaciones en las que todavía no funciona, puede usar un DeploymentItem "hackear" o modificar su archivo de ejecución de secuencia.

intente buscar en esta respuesta: https://stackoverflow.com/a/33344573/2537017

Cuestiones relacionadas