Compartir a través de


Solucionar problemas de ejecución de pruebas

Actualización: noviembre 2007

Si no se ejecuta correctamente la prueba, para investigar el motivo del error puede comprobar el entorno de prueba, que incluye cómo se configuró la prueba y las opciones de configuración de la ejecución de la prueba activa. En algunos casos, como aquéllos relacionados con la implementación, los errores son independientes del tipo de prueba. En otros casos, el tipo de prueba determina qué se debe investigar y cómo hacerlo. Si desea sugerencias para la investigación por tipo de prueba, vea Detalles por tipo de prueba.

Los errores relacionados con las pruebas se le notificarán en uno de los dos siguientes niveles:

  • Errores en las pruebas. En la ventana de resultados de pruebas, puede hacer doble clic en el resultado de la prueba o bien hacer clic con el botón secundario en el resultado y seleccionar Ver detalles de resultados de la prueba. Se mostrará la página [Detalles] de la prueba, donde se muestran los mensajes de error y otros detalles, que dependen del tipo de prueba, como información de seguimiento de la pila para las pruebas unitarias. Un ejemplo de un error de prueba es un error de tiempo de espera de prueba, que se produce si se alcanza el límite de tiempo de espera de la prueba.

  • Errores de ejecución. Los errores de ejecución, que incluyen los errores de configuración de la ejecución, se notifican en la ventana Resultados de pruebas. Cuando se produce un error de ejecución, aparece un vínculo en la barra de estado de la ventana Resultados de pruebas. Al hacer clic en este vínculo se muestran más detalles del error, en la página [Detalles] de Ejecución de prueba. Para mostrar la página [Detalles] de Ejecución de prueba, también puede hacer clic en Detalles de ejecución en la barra de herramientas de la ventana Resultados de pruebas. Un ejemplo de un error de ejecución es un error de tiempo de espera de ejecución, que se produce si se alcanza el límite de tiempo de espera de la ejecución.

No todos los problemas producen errores en la ejecución de una prueba. Después de haber decidido obtener los datos de cobertura de código, la ejecución de pruebas puede generar una advertencia si el proyecto presenta determinada configuración de generación. Para obtener más información, vea Utilizar la configuración de generación Cualquier CPU al obtener datos de cobertura de código.

Errores de implementación

Ciertos errores pueden ocurrir en cualquier prueba que se ejecute automáticamente, es decir, en cualquier prueba que no sea manual. Estos errores suelen estar relacionados con la implementación de las pruebas. Cuando se implementa una prueba, el archivo que contiene se copia en otra carpeta, ya sea en el equipo local o en un equipo remoto. Para obtener más información, vea Implementación de pruebas.

Por ejemplo, para las pruebas unitarias, el archivo .dll que se generó a partir del proyecto de prueba es el archivo que se debe implementar. Si no se puede implementar este archivo binario, cuando se ejecute cualquier prueba unitaria que contenga, se marcará inmediatamente con el resultado Error en la ventana Resultados de pruebas.

Para corregir este error, compruebe si los archivos están disponibles en el equipo local y si se produjeron errores de compilación la última vez que regeneró los archivos binarios de la prueba.

Los archivos binarios no son los únicos que se pueden implementar. Podría especificar que una prueba requiere un archivo determinado, por ejemplo, un archivo de datos, que por lo tanto debe implementarse con ella. ‎Durante la implementación, si no se encuentra este archivo, ya sea porque se ha movido o eliminado, la prueba no se ejecutará correctamente y se producirá un error. Para obtener información de este error con respecto a las pruebas genéricas, vea también Detalles por tipo de prueba.

Para investigar este error, el primer lugar anote los archivos y carpetas especificados en la página Implementación del cuadro de diálogo que permite editar las configuraciones de ejecución de pruebas. Para obtener más información, consulte Cómo: Especificar la configuración de una ejecución de prueba. A continuación, asegúrese de que dichos archivos y carpetas están presentes en el disco y que sus nombres son idénticos.

Su solución puede tener varios archivos de configuración de ejecución. En este caso, asegúrese de examinar la configuración de la ejecución que estaba activa cuando se produjo el error en la prueba. Para determinar qué configuración de ejecución estaba activa, examine la página Detalles de ejecución de la prueba para esa ejecución de prueba. Para obtener más información, consulte la sección "Página Detalles de Resultados de las pruebas", en Resultados de prueba registrados en un informe.

Para obtener más información acerca de los archivos de configuración de la ejecución activa, vea Cómo: Aplicar la configuración de una ejecución de prueba.  

Errores en la notificación de resultados de pruebas remotas

Cuando se ejecutan pruebas de forma remota, es posible que no se muestren los resultados de las pruebas. Este error probablemente se debe a que las pruebas se ejecutan de manera remota.

Igual que los resultados de la ejecución local de las pruebas, los resultados de la ejecución remota se notifican localmente. La notificación de los resultados de determinadas pruebas remotas depende de la capacidad de Visual Studio Team System Test para copiar archivos generados de resultados de pruebas desde el equipo de las pruebas remotas en el equipo local.

Si detecta errores en los resultados de las pruebas remotas, lo primero que debe averiguar es si se ha interrumpido la conexión de red entre el equipo remoto y el equipo en el que se ejecuta Visual Studio.

Para obtener más información, vea Solución de problemas de controladores, agentes y plataformas de pruebas.

Errores de instrumentación

Para habilitar la notificación de cobertura de código, los archivos binarios que se prueban deben ser instrumentados y, a continuación, implementados, antes de realizar pruebas en ellos.

Si no se instrumentara el archivo binario, se produciría un error de notificación de cobertura de código. Al finalizar la ejecución de prueba, la página Detalles de la ejecución de la prueba muestra un mensaje de error que indica la imposibilidad de crear un informe de la cobertura de código, así como la causa.

Las causas posibles de un error de instrumentación de un archivo binario en contexto son que esté marcado como de sólo lectura o bien que esté siendo utilizado por otro proceso. Para corregir el error de un archivo binario de sólo lectura, examine en primer lugar los atributos del archivo, para asegurarse de que puede escribir en él. Para averiguar qué archivos binarios debe comprobar, abra la página Cobertura de código de la configuración de la ejecución activa; aquí es donde se especificaron los archivos para instrumentación. Para obtener más información, consulte Cómo: Obtener datos de cobertura de código.

Otra causa del error de cobertura de código al utilizar la instrumentación en contexto puede ser que se estén utilizando una o varias pruebas unitarias junto con una prueba manual. Durante la prueba manual, el evaluador ejecuta el código de producción en pruebas. Si el evaluador presiona F5 o CTRL+F5 para iniciar o depurar el código, se vuelve a generar el archivo ejecutable del proyecto, lo que elimina la instrumentación.

Asegúrese también de que ningún otro proceso esté utilizando el archivo binario. Por ejemplo, asegúrese de que no tiene el archivo abierto en otra instancia de Visual Studio.

Al instrumentar un Ensamblados con nombre seguro, pueden producirse otros errores relacionados con volver a firmar el ensamblado. Para obtener más información, vea Instrumentar y volver a firmar ensamblados.

Cerrar los resultados de pruebas para mejorar el rendimiento

Para mejorar el rendimiento de Visual Studio, cierre los resultados de pruebas anteriores.

Al ejecutar pruebas, Visual Studio almacena las ejecuciones de pruebas y los resultados de éstas en la memoria. A medida que se acumulan ejecuciones y resultados, más memoria se consume. Puede borrar de la memoria las ejecuciones de pruebas haciendo clic en Cerrar resultados en la barra de herramientas de la ventana Resultados de pruebas. Con esta acción se borran los objetos de resultados de pruebas pero no se llama explícitamente al recolector de elementos no utilizados. Esto significa que la memoria estará disponible, pero puede que no inmediatamente.

También puede establecer el número máximo de ejecuciones de pruebas que se conservan en memoria. Para obtener más información, vea Cómo: Limitar el número de ejecuciones de pruebas almacenadas.

Utilizar la configuración de generación Cualquier CPU al obtener datos de cobertura de código

Sólo pueden obtenerse datos de cobertura de código al probar el código en ensamblados de 32 bits. Para garantizar esta condición, establezca una propiedad de generación determinada:

Nota:

Esta advertencia no se aplica a los proyectos de C++ porque Cualquier CPU no es una opción de plataforma para los proyectos de C++.

Si genera el proyecto con el valor Cualquier CPU, las pruebas que se ejecuten en el ensamblado resultante producirán datos de cobertura de código, pero la ejecución de la prueba también generará una advertencia. Puede ver el texto de la advertencia en la página Detalles de ejecución de la prueba:

Warning VSP2013 : Instrumenting this image requires it to run as a 32-bit process.  The CLR header flags have been updated to reflect this.

Esta advertencia significa que el ensamblado se ha vuelto a compilar con la propiedad x86 aplicada con el propósito de obtener datos de cobertura de código durante esta ejecución de la prueba. Para evitar esta advertencia, compile cualquier ensamblado para el que desee obtener datos de cobertura de código con la configuración x86.

Nota:

Si la aplicación tiene que ejecutarse en equipos de 32 y 64 bits, recuerde volver a compilarla utilizando la configuración Cualquier CPU una vez completadas las pruebas.

La ejecución de pruebas unitarias puede bloquear un ensamblado de prueba de C++/CLI

Podría darse la situación de que el motor de ejecución de pruebas abriese y bloquease un ensamblado de su proyecto de prueba. Si esto ocurre, no podrá, por ejemplo, guardar los cambios realizados en el ensamblado. Este problema puede producirse en las siguientes situaciones:

  • Caso 1: ha deshabilitado la implementación de su proyecto de prueba, TestProjectA. TestProjectA se compiló en C++/CLI. El código de TestProjectA define una clase de atributo y ese atributo decora al menos uno de los métodos de prueba de TestProjectA. En este punto, al ejecutar pruebas unitarias en TestProjectA, el motor de ejecución de pruebas abre TestProjectA.DLL y lo deja en un estado bloqueado.

  • Caso 2: su proyecto de prueba, TestProject1, contiene una DLL que se compiló a partir de un segundo proyecto de prueba, TestProject2. TestProject2 se compiló en C++/CLI. El código de TestProject2 define una clase de atributo y ese atributo decora al menos uno de los métodos de prueba de TestProject2. Ahora, al ejecutar pruebas unitarias en TestProject1, el motor de ejecución de pruebas abre TestProject2.DLL y lo deja en un estado bloqueado.

En ambos casos, la solución podría consistir en dos partes. En primer lugar, debe realizar los pasos siguientes.

  1. En el menú Herramientas, elija Opciones.

    Se abrirá el cuadro de diálogo Opciones.

  2. Expanda Herramientas de prueba y haga clic en Ejecución de prueba.

  3. En Rendimiento, desactive la casilla Mantener motor de ejecución de pruebas en ejecución entre ejecuciones de prueba.

Después de completar estos pasos, si el problema continúa, haga lo siguiente:

Modifique el código para que el proyecto de prueba compilado en C++/CLI no tenga que cargarse en el AppDomain predeterminado. Una forma de hacerlo es mover las definiciones de los atributos personalizados que utiliza a un ensamblado independiente implementado en C#.

Detalles por tipo de prueba

Determinados errores se producen con frecuencia o principalmente mientras se ejecutan tipos de prueba determinados, tal y como se explica en esta sección.

  • Pruebas manuales. No se pueden hacer pruebas manuales de manera remota. Si se intenta iniciar una ejecución de prueba que incluye una prueba manual, Test Edition intenta quitar la prueba manual de la ejecución de prueba. En este caso, se muestra una alerta y se ofrece la posibilidad de cancelar la ejecución de prueba o dejar que continúe sin la prueba manual. Para obtener más información, consulte Cuadros de diálogo de Test Edition.

  • Pruebas por orden. Los errores que se producen en las pruebas por orden suelen implicar la implementación de archivos. Para que el motor de prueba pueda ejecutar una prueba por orden, debe localizar e implementar todos los archivos de prueba de todas las pruebas contenidas, además del resto de archivos necesarios. De no conseguirlo para cualquiera de las pruebas individuales, se produciría un error.

  • Pruebas genéricas. Los errores de implementación también pueden aparecer cuando se ejecutan pruebas genéricas. Para las pruebas genéricas, puede especificar la implementación de los archivos de dos maneras: en la página Implementación de la configuración de la ejecución de prueba, y en la página de creación de la propia prueba genérica. ‎La prueba podría producir errores si no se especifican todos los archivos necesarios o si Herramientas para pruebas Team System no los encuentra en las ubicaciones especificadas.

    Estas dos maneras diferentes de implementar los archivos causan la aparición de errores en distintos niveles. Si el error de implementación está relacionado con un archivo especificado en la página de creación de la prueba genérica, el error se producirá en el nivel de prueba. Si el error de implementación está relacionado con un archivo especificado en la configuración de la ejecución, el error se producirá en el nivel de ejecución.

Vea también

Tareas

Cómo: Establecer límites de tiempo para la ejecución de pruebas

Conceptos

Cuadros de diálogo de Test Edition

Resultados de prueba registrados en un informe

Instrumentar y volver a firmar ensamblados

Pruebas unitarias y C++

Otros recursos

Implementación de pruebas

Configurar la ejecución de pruebas