.net - MSTest.exe no encuentra app.config
visual-studio-2008 app-config (9)
Actualmente estoy intentando ejecutar MSTest.exe desde NCover, pero creo que la pregunta podría aplicarse generalmente a ejecutar MSTest.exe desde la línea de comandos.
Si tengo el argumento "/ noisolation", entonces MSTest.exe parece encontrar y usar el app.config como se esperaba. Sin él, NCover no captura ninguna información de cobertura. De mi investigación hasta ahora, parece que NCover necesita / no aislamiento. Entonces la pregunta es cómo hacer que mis archivos * .config funcionen cuando se pasa ese argumento.
Mi configuración de NCover es:
Aplicación al perfil
C: / Archivos de programa (x86) / Microsoft Visual Studio 9.0 / Common7 / IDE / MSTest.exe
Carpeta de trabajo
C: / Documents and Settings / MyProfile / My Documents / Visual Studio 2008 / Projects / XYZ / XYZ.CoreTest / bin / Debug
Argumentos de la aplicación
/ noisolation / testcontainer: "C: / Documents and Settings / MyProfile / Mis documentos / Visual Studio 2008 / Projects / XYZ / XYZ.CoreTest / bin / Debug / XYZ.CoreTest.dll"
Actualización: Agregué un seguimiento que muestra que mi configuración está (no sorprendentemente) tratando de leer desde "C: / Archivos de programa (x86) / Microsoft Visual Studio 9.0 / Common7 / IDE / MSTest.exe.Config".
Actualización 2: si es posible, no quiero editar MSTest.exe.Config. Eso simplemente no es terriblemente portátil.
Tuve el mismo problema en las compilaciones de Jenkins con el complemento MSTestRunner . Comprobar Omitir No Aislamiento desde la página de configuración resolvió el problema.
En Visual Studio, marque el archivo App.config en la propiedad de CopyAlways. (haga clic derecho en el archivo, elija propiedades para llegar al panel de propiedades)
Nunca antes había usado NoIsolation, pero si lo estoy entendiendo correctamente, literalmente ejecuta todo tu código de prueba en la clase MSTest. Siendo así, lo hace y debe leer la configuración de la aplicación para MSTest. Si insiste en usar noisolation, creo que debería fusionar su App.config en MSTest.exe.config. Por supuesto, eso es un truco.
Probablemente sea mejor evitar el noisolation por completo. Si se debe a un error, corrija el error si es posible. Evite el error si reorganiza (refactorización importante) su aplicación no es posible. No estoy seguro de que haya una alternativa elegante .
Encontré " Creo que tenemos que encontrar la causa raíz de este problema para evitar el cambio de no aislamiento. Podría necesitar modificar su aplicación. ¿Es posible crear una solución simple que reproduzca el mismo problema? " En esta URL .
Ok, corro el riesgo de que mi publicación se convierta en una prueba de llamas de unidad, pero creo que el problema son tus pruebas y posiblemente incluso tu código. Deberías refactorizar.
Las pruebas unitarias deben ser atómicas. Una sola prueba no debería tener dependencias externas y un archivo de configuración es una dependencia. Ninguna prueba debe confiar en el archivo de configuración.
Si está probando un método que utiliza información de un archivo config, refactorice su código para que la información configurada se lea fuera del método y se pase al método o se establezca como una propiedad antes de llamar al método. De esta forma, su prueba puede pasar el valor al método o establecer la propiedad durante la configuración de la prueba.
Si necesita su app.config para una cadena de conexión de base de datos, está solo. DALs son notoriamente difíciles de prueba unitaria. Si se trata de una cadena de conexión de servicio web, no la use; simule la interfaz.
Para aclarar la confusión: no usar / noisolation = si encuentra un archivo SameNameAsYourDll.dll.config, se implementará automáticamente con el dll de prueba y se usará para la configuración de la aplicación para el dominio de la aplicación que ejecuta las pruebas en ese montaje
using / noisolation = Todo el aislamiento que hacemos entre pruebas, usted, el proceso de host y todo lo demás está fuera de la ventana. Todavía podemos aislarnos, pero no obtiene el beneficio adicional de que el dominio de la aplicación sea único para su dll de prueba. Por lo tanto, la configuración de tu dll no ayudará.
En http://docs.ncover.com/ref/2-0/whats-new-in-ncover-2-0/release-notes-for-ncover-2-1-0/ en virtud de las reparaciones de NCover:
La ejecución de cobertura en MSTest ya no requiere el indicador "/ noisolation". NCover reúne correctamente la cobertura
Si esto es realmente fijo, entonces actualice NCover a 2.1.0. Quizás eso funcione.
De Craig Stuntz en un comentario en el texto del enlace
Cómo hacer esto con MSTest.
En el Explorador de soluciones, haga clic con el botón derecho en la Solución (no en el Proyecto).
Haga clic en Agregar, Nuevo elemento
En Categorías, seleccione Configuración de ejecución de prueba
Ahora elija el elemento Configuración de prueba de ejecución y agréguelo a su proyecto
En el Explorador de soluciones, haga doble clic en la configuración de ejecución de prueba que acaba de crear
Haga clic en el elemento Despliegue
Agregue su archivo de configuración como un archivo desplegado (o implemente toda la carpeta que lo contiene, si corresponde)
Esto me tomó un poco de tiempo descubrirlo, pero estoy en una situación similar y funciona para mí.
Intente cambiar su nombre de app.config
a projectname.extension.**config**
Por ejemplo, si tiene un proyecto de prueba unitaria llamado proj1
y usa su dll
, cambie el nombre de app.config
a proj1.dll.config
Esto funcionó para mí.
Hay una técnica donde puedes combinar los contenidos de los archivos de configuración que se detallan aquí . Puede agregar una línea de entrada de archivo fija a MSTest.exe.Config, y luego copiar el app.config de su aplicación en esa ubicación de archivo fija. Es feo, pero más portátil que hackear MSTest.exe.Config para cada eventualidad diferente.