2009-01-27 16 views
18

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.MSTest.exe no encuentra app.config

Si tengo el argumento "/ noisolation", entonces MSTest.exe parece encontrar y utilizar el app.config como se esperaba. Sin él, NCover no captura ninguna información de cobertura. De mi investigación hasta el momento, parece que NCover necesita/no aislamiento. Entonces la pregunta es cómo hacer que mis archivos * .config funcionen cuando se pasa ese argumento.

configuración

Mi NCover son:

Aplicación a Perfil
C: \ Archivos de programa (x86) \ Microsoft Visual Studio 9.0 \ Common7 \ IDE \ MSTest.exe

carpeta de trabajo
C: \ Documents and Settings \ MyProfile \ Mis documentos \ Visual Studio 2008 \ Projects \ XYZ \ XYZ.CoreTest \ bin \ Debug

argumentos de aplicación
/noisolation/testcontainer: "C: \ Documents and Settings \ MiPerfil \ 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 es sorprendente) 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.

+0

Relacionados: http://stackoverflow.com/questions/4811778/mstest-and-app-config-issue (contiene una solución posible) –

Respuesta

12

De Craig Stuntz en un comentario en link text

Cómo hacer esto con MSTest.

  1. En Solution Explorer, haga clic derecho en la solución (no en el proyecto).

  2. Haga clic en Agregar nuevo elemento

  3. En Categorías, seleccione Ejecutar Configuración de prueba

  4. Ahora elija el elemento de configuración Ejecutar prueba y agregarlo a su proyecto

  5. En el Explorador de soluciones, haga doble -haga clic en la configuración de ejecución de prueba que acaba de crear

  6. Haga clic en el elemento de implementación

  7. Añadir su archivo de configuración como un archivo desplegado (o desplegar toda la carpeta que lo contiene, en su caso)

Esto me tomó un poco de tiempo para averiguar, pero estoy en una situación similar y funciona para mi

+0

Esto también solo funciona para Visual Studio 2008 :( – kevindaub

+1

1000 Gracias! Esto me salvó el día, con poca adaptación. Con VS2010, "Configuración de ejecución de prueba" se llama "Configuración de prueba". Agregar el archivo de configuración me sirvió de algo a continuación. – Marcel

+1

Esto no hace nada por mí en 2010. Todavía no tengo solución a este problema. No puedo evitar que lea desde el directorio/IDE /. – BradLaney

5

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)

+0

Hecho esto, el (renombrado) app.config está en mi carpeta de salida derecha al lado de la asamblea ... que es lo que ha estado haciendo. Mi aplicación todavía intenta leer MSTest.exe.config en lugar de MyAssembly.dll.config. Si omito el modificador/noisolation, lee el archivo correcto. – Larsenal

+0

Acabo de toparme con el mismo problema y esto funcionó para mí. ¡Gracias! –

+0

la manera fácil! +1 – Vielinko

0

Nunca antes he usado NoIsolation, pero si lo estoy entendiendo correctamente, literalmente ejecuta todo su 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 alternativa.

Encontré "Creo que tenemos que encontrar la causa raíz de este problema para evitar el cambio de noisolación. Es posible que tenga que modificar su aplicación. ¿Es posible crear una solución simple que reproduzca el mismo problema? "al this URL.

+0

Si este es el caso, entonces tal vez mi verdadera pregunta tiene que ver con cómo hacer para que NCover funcione correctamente con MSTest.exe sin/noisolation. – Larsenal

+0

Solo algunas ideas; siento que suenen críticos. No intencional. Si está utilizando el sistema de equipo, ¿tal vez podría usar la cobertura de código de esta? http://blogs.vertigosoftware.com/teamsystem/archive/2006/02/06/nUnit_and_Team_System_Code_Coverage.aspx –

1

Existe una técnica en la que puede combinar el contenido de los archivos de configuración detallados en here. 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.

2

En http://docs.ncover.com/ref/2-0/whats-new-in-ncover-2-0/release-notes-for-ncover-2-1-0/ bajo NCover Correcciones:

Ejecución de la cobertura en MSTest ya no requiere la bandera "/ noisolation". NCover recoge correctamente la cobertura

Si esto es así fijada, a continuación, actualizar a NCover 2.1.0. Quizás eso funcione.

+0

Tendré que investigar esto. – Larsenal

+0

Parece que el enlace se ha cambiado a http://docs.ncover.com/ref/2-0/whats-new-in-ncover-2-0/release-notes-for-ncover-2-1-0/ – Regent

-2

Ok, estoy corriendo el riesgo de que mi puesto recaerá en un flamewar unidad de pruebas, pero creo que el problema es sus pruebas y posiblemente incluso su 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 dicha 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 que su app.config para una cadena de conexión de base de datos, usted está en su propia. 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.

+0

Lo que estoy haciendo es probablemente mejor caracterizado como pruebas de integración, no como pruebas unitarias. En este caso particular, tengo que agregar retroactivamente algunas pruebas a una base de código existente. – Larsenal

+0

¡Oh, odio hacer eso! Ah, bueno, respaldo mi declaración ... si tienes la oportunidad de refactorizar tu código para que sea más comprobable, hazlo. Si tus manos están atadas, tus manos están atadas. Además, si puedes, observa las burlas de tus integraciones, y te hará maravillas más adelante. – Randolpho

0

Para aclarar la confusión: no usar /noisolation = si encuentra un archivo SameNameAsYourDll.dll.config, que va a ser desplegado con la DLL de prueba de forma automática, y se utilizará para la aplicación de configuración para el dominio de aplicación que ejecuta las pruebas en que el montaje

utilizando/noisolation = todo el aislamiento que hacemos entre las 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á.

1

Tuve el mismo problema en las compilaciones de Jenkins con MSTestRunner Plugin. Comprobar Omitir No Aislamiento desde la página de configuración resolvió el problema.

0

Intente cambiar su nombre de app.config a projectname.extension.**config**

Por ejemplo, si usted tiene un proyecto de prueba de unidad llamado proj1 y utiliza su dll, cambiar el nombre de app.config a proj1.dll.config

Esto funcionó para mí.