studio - app config transformation c#
Problema MSTest y app.config (3)
Estoy atascado tratando de automatizar las pruebas de unidades que se ejecutan con MSTest y la implementación de app.config. Leí varias publicaciones y blogs, probé varias cosas y, sin embargo, todavía app.config no parece recogido durante la ejecución de MSTest. Tener un dll que contenga todas mis pruebas unitarias construidas con msbuild, esto es lo que he intentado ...
Intento 1
- Copié app.config a la misma ubicación con MyTests.dll como MyTests.dll.config (en uno de los foros de msdn se dijo que sería recogido automágicamente)
- Se agregó el atributo
[DeploymentItem("MyTests.dll.config")]
a cada prueba - Ran
MSTest.exe /noisolation /testcontainer:d:/MyTestTests.dll /test:MyTest
Intento 2
- Creado el archivo local.testrunconfig con el siguiente contenido (abajo)
- Ran mstest con / runconfig y sin aislamiento, pero no se ejecutó nada:
MSTest.exe /runconfig:d:/local.testrunconfig /testcontainer:d:/MyTestTests.dll /test:MyTest
Resultado: Cargando d: / local.testrunconfig ...
d: / local.testrunconfig
d: / local.testrunconfig
... y no pasa nada: ¡no hay errores, no se ejecutan pruebas!
EDIT / RESOLUCIÓN: de forma predeterminada, MSTest ejecuta pruebas en procesos separados. En este caso, el archivo de configuración se recoge automáticamente si se denomina como "dllname.dll.config". Sin embargo, es difícil depurar las pruebas que se ejecutan en procesos separados si se ejecutan fuera de VS. / Noisolation Switch se usa para hacer que MSTest ejecute todas las pruebas en un solo proceso. Sin embargo, en este caso, el archivo de configuración de prueba NO se recoge. En su lugar, se utiliza el archivo MSTest.exe.config, que se encuentra en el mismo directorio que MSTest. Para resolver este problema, el archivo de configuración se puede cargar de forma pragmática de esta manera:
ExeConfigurationFileMap map = new ExeConfigurationFileMap();
map.ExeConfigFilename = @"path to config file";
Configuration config =
ConfigurationManager.OpenMappedExeConfiguration(map, ConfigurationUserLevel.None);
El problema es, como resulta, con nuestro entorno de compilación demasiado complicado y el hecho de que estamos utilizando una versión x-copiable de MSTest (producido localmente). El siguiente comando tuvo éxito cuando me encontré con VSST880 "correcto" MSTest:
"%ProgramFiles%/Microsoft Visual Studio 9.0/Common7/IDE/MSTest.exe" /testcontainer:d:/MyTests.dll /test:MyTests /resultsfile:results.trx
¡Gracias a todos por las respuestas! El cheque va para ti, Marius, me hiciste aprender cosas nuevas con tu tesrunconfig.
Kateroh,
Mi configuración se ve así (estoy usando msbuild desde un TFSbuild.proj):
Construir sln
Copie todo desde la salida a% TEMP% (magia negra: D) No sé por qué, pero mstest está buscando referencias en% TEMP%.
Ejecute mstest con parms:
"C:/Program Files/Microsoft Visual Studio 10.0/Common7/IDE/MSTest.exe" /nologo /testcontainer:$(TestDir)/mylib.dll /resultsfile:$(TestResultFile) /runconfig:$(SlnDir)/AutomaticBuildTest.testrunconfig /searchpathroot:$(TestDir) /publish:mytfsserver /publishbuild:$(BuildDefinition) /flavor:Debug /platform:AnyCPU /teamproject:mytfsproject
donde AutomaticBuildTest.testrunconfig está abajo
<?xml version="1.0" encoding="UTF-8"?>
<TestSettings name="AutomaticBuildTest" id="eda99352-93e1-402e-9517-d04fffa66b35" xmlns="http://microsoft.com/schemas/VisualStudio/TeamTest/2010">
<!--<Deployment enabled="false" />-->
<Deployment enabled="true">
<DeploymentItem filename="D:/sa12/78/bin/Debug" />
</Deployment>
<NamingScheme baseName="BC2ALibraryTest" appendTimeStamp="false" useDefault="false" />
<!-- http://blogs.msdn.com/b/vstsqualitytools/archive/2009/12/01/executing-unit-tests-in-parallel-on-a-multi-cpu-core-machine.aspx -->
<Execution location="Local" hostProcessPlatform="MSIL">
<!--http://msdn.microsoft.com/en-us/library/ms404663.aspx-->
<ExecutionThread apartmentState="MTA" />
<Hosts skipUnhostableTests="false" />
<TestTypeSpecific>
<UnitTestRunConfig testTypeId="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b">
<AssemblyResolution applicationBaseDirectory="D:/sa12/78/bin/Debug">
<TestDirectory useLoadContext="false" />
</AssemblyResolution>
</UnitTestRunConfig>
</TestTypeSpecific>
<AgentRule name="LocalMachineDefaultRole">
</AgentRule>
</Execution>
</TestSettings>
Su aplicación no usa app.config. Utiliza la aplicación .exe.config. Eso es lo que necesitas desplegar.
Lo siento, no vi que estabas probando una DLL.
Esta no es la forma en que funciona la configuración de .NET. Cada DLL no usa su propio archivo de configuración. Solo puede usar el archivo de configuración del .exe en el que se ejecuta (en realidad, del AppDomain en el que se está ejecutando).
De alguna manera, necesitarías obtener MSTEST para agregar tu .dll.config a su propia configuración, asumiendo que en realidad es el proceso de host. No veo cómo hacer eso desde la línea de comando.
Usualmente uso un Proyecto de Prueba de Unidad en Visual Studio, así que simplemente despliegue el archivo de configuración de ese proyecto. Funciona bien.