Compartir por


Pruebas con "dotnet test"

En este artículo se proporciona información detallada sobre el comando de la CLI de dotnet test, incluida la compatibilidad del historial con VSTest y Microsoft. Testing.Platform (MTP).

El dotnet test comando funciona en dos modos principales:

  • VSTest modo: este es el modo predeterminado para dotnet test y era el único modo disponible antes del SDK de .NET 10. Está diseñado principalmente para VSTest, pero también puede ejecutar pruebas de Microsoft.Testing.Platform mediante el paquete NuGet Microsoft.Testing.Platform.MSBuild.
  • Microsoft. Modo Testing.Platform: introducido con el SDK de .NET 10, este modo admite exclusivamente aplicaciones de prueba creadas con Microsoft. Testing.Platform.

Sugerencia

Para consultar la referencia de la CLI, consulte dotnet test.

Modo VSTest de dotnet test

Durante mucho tiempo, VSTest era la única plataforma de prueba en .NET. Por lo tanto, dotnet test se diseñó exclusivamente para VSTest, con todas las opciones de línea de comandos adaptadas a VSTest.

El proceso implica invocar el VSTest destino de MSBuild, que desencadena otros destinos internos para ejecutarse y, en última instancia, ejecuta vstest.console. Todas las dotnet test opciones de línea de comandos se traducen a sus equivalentes en vstest.console.

Ejecución de proyectos MTP con el modo VSTest

dotnet test se diseñó para ejecutar proyectos de VSTest en modo VSTest. Sin embargo, puede ejecutar proyectos MTP en dotnet test modo VSTest mediante el paquete Microsoft.Testing.Platform.MSBuild. Desde la perspectiva del usuario, este soporte está habilitado estableciendo la propiedad MSBuild TestingPlatformDotnetTestSupport a true, ya que de forma predeterminada está false por razones de compatibilidad con versiones anteriores. Cuando esta propiedad se establece en true, Microsoft. Testing.Platform.MSBuild cambia el comportamiento de destino de VSTest y lo redirige para llamar a InvokeTestingPlatform. InvokeTestingPlatform es un destino de MSBuild incluido en Microsoft. Testing.Platform.MSBuild responsable de ejecutar correctamente aplicaciones de prueba de MTP como ejecutables. Las opciones de línea de comandos específicas de VSTest, como --logger, se omiten silenciosamente en este modo. Para incluir argumentos específicos de MTP, como --report-trx, debe anexarlos después de un elemento adicional --. Por ejemplo: dotnet test -- --report-trx. En MTP 1.9, se genera una advertencia con código MTP0001 cuando se detecta un argumento que se omite silenciosamente.

Nota:

MSTest y NUnit usan el Microsoft.Testing.Extensions.VSTestBridge package. Al establecer EnableMSTestRunner o EnableNUnitRunner (que habilita Microsoft. Testing.Platform), el proyecto de prueba admitirá VSTest y Microsoft. Testing.Platform. En ese escenario, si usa el modo VSTest de dotnet test y no establece TestingPlatformDotnetTestSupport en verdadero, básicamente está ejecutando completamente con VSTest, como si EnableMSTestRunner y EnableNUnitRunner no estuvieran establecidos en verdadero.

Nota:

Se recomienda encarecidamente establecer la TestingPlatformDotnetTestSupport propiedad en Directory.Build.props. Esto garantiza que no es necesario agregarlo a cada archivo de proyecto de prueba individualmente. Además, evita el riesgo de introducir un nuevo proyecto de prueba que no establece esta propiedad, lo que podría dar lugar a una solución en la que algunos proyectos usan VSTest, mientras que otros usan Microsoft. Testing.Platform. Esta configuración mixta podría no funcionar correctamente y es un escenario no admitido.

Importante

La ejecución de proyectos MTP en modo VSTest se considera como una opción heredada en favor de la nueva experiencia disponible en el SDK de .NET 10. La capacidad de utilizar este modo se eliminará en Microsoft.Testing.Platform versión 2 si se ejecuta con .NET SDK 10. El soporte sigue disponible para .NET 9 SDK y versiones anteriores para compatibilidad hacia atrás. Para obtener más información, vea Migrar al modo MTP de dotnet test.

En la lista siguiente se describen las opciones de línea de comandos de dotnet test comando en modo VSTest compatibles con Microsoft. Testing.Platform. Estas opciones son específicas del proceso de compilación y no se pasan a VSTest, por lo que funcionan con MTP.

  • -a|--arch <ARCHITECTURE>
  • --artifacts-path <ARTIFACTS_DIR>
  • -c|--configuration <CONFIGURATION>
  • -f|--framework <FRAMEWORK>
  • -e|--environment <NAME="VALUE">
  • --interactive
  • --no-build
  • --nologo
  • --no-restore
  • -o|--output <OUTPUT_DIRECTORY>
  • --os <OS>
  • -r|--runtime <RUNTIME_IDENTIFIER>
  • -v|--verbosity <LEVEL>

Sugerencia

Puede personalizar los argumentos de la línea de comandos de la aplicación de prueba a través TestingPlatformCommandLineArguments de la propiedad MSBuild:

<PropertyGroup>
  ...
  <TestingPlatformCommandLineArguments>--minimum-expected-tests 10</TestingPlatformCommandLineArguments>
</PropertyGroup>

Mostrar error por prueba

De forma predeterminada, se resumen los errores de prueba en un archivo .log y se notifica un único error por proyecto de prueba a MSBuild.

Para mostrar los errores por prueba fallida, especifique -p:TestingPlatformShowTestsFailure=true en la línea de comandos o agregue la propiedad <TestingPlatformShowTestsFailure>true</TestingPlatformShowTestsFailure> al archivo del proyecto.

En la línea de comandos:

dotnet test -p:TestingPlatformShowTestsFailure=true

Mostrar la salida completa de la plataforma

De forma predeterminada, todas las salidas de la consola que escribe el ejecutable de prueba subyacente se capturan y se ocultan al usuario. Esto incluye el banner, la información de la versión y la información de la prueba con formato.

Para mostrar esta información junto con la salida de MSBuild, use <TestingPlatformCaptureOutput>false</TestingPlatformCaptureOutput>.

Esta opción no afecta a cómo el marco de pruebas captura la salida del usuario escrita por Console.WriteLine ni a otras formas similares de escribir en la consola.

En la línea de comandos:

dotnet test -p:TestingPlatformCaptureOutput=false

Detalles técnicos avanzados

En el dotnet test modo VSTest de , se utiliza -- para indicar los argumentos de RunSettings. Originalmente, dotnet test se diseñó para pasar esos argumentos como una propiedad de MSBuild denominada VSTestCLIRunSettings. Por lo tanto, al ejecutar aplicaciones de prueba de MTP en el modo VSTest, se reasigna el valor de VSTestCLIRunSettings para representar los "argumentos de la aplicación".

Mezcla de VSTest y Microsoft. Testing.Platform (MTP)

Al ejecutar dotnet test en modo VSTest, se recomienda evitar incluir VSTest y Microsoft. Testing.Platform en la misma solución.

Este escenario no se admite oficialmente y debe tener en cuenta lo siguiente:

  • Las opciones de línea de comandos específicas de VSTest solo se aplicarán a los proyectos de VSTest y no a las aplicaciones de prueba de MTP.
  • Las opciones de línea de comandos específicas de MTP proporcionadas después -- se tratarán como argumentos RunSettings para proyectos de VSTest.

Conclusiones clave

  • Para ejecutar aplicaciones de prueba de MTP en modo VSTest, debe usar , pasar las opciones de línea de comandos específicas de MTP después del y establecer en .
  • Las opciones de línea de comandos orientadas a VSTest se omiten silenciosamente.

Debido a estos problemas, .NET ha introducido un nuevo modo dotnet test diseñado específicamente para MTP. Animamos a los usuarios de MTP a migrar desde el modo dotnet test de VSTest al nuevo modo con el SDK de .NET 10.

Microsoft.Testing.Platform (MTP) modo de dotnet test

Para solucionar los problemas detectados al ejecutar dotnet test con MTP en modo VSTest, .NET introdujo un nuevo modo en el SDK de .NET 10 diseñado específicamente para MTP.

Para habilitar este modo, agregue la siguiente configuración al global.json archivo:

{
    "test": {
        "runner": "Microsoft.Testing.Platform"
    }
}

Importante

La experiencia de dotnet test para MTP solo se admite en Microsoft.Testing.Platform versión 1.7 y posteriores.

Dado que este modo está diseñado específicamente para Microsoft.Testing.Platform, no se requieren ni TestingPlatformDotnetTestSupport ni -- adicionales.

Importante

Este modo solo es compatible con Microsoft. Testing.Platform versión 1.7.0 y posteriores.

Importante

Si el proyecto de prueba admite VSTest pero no admite MTP, se generará un error.

Sugerencia

Puede personalizar los argumentos de la línea de comandos de la aplicación de prueba a través TestingPlatformCommandLineArguments de la propiedad MSBuild:

<PropertyGroup>
  ...
  <TestingPlatformCommandLineArguments>--minimum-expected-tests 10</TestingPlatformCommandLineArguments>
</PropertyGroup>

Migra al modo MTP de dotnet test

Para los usuarios de MTP que usan el modo VSTest de dotnet test, hay algunas acciones necesarias para migrar a la experiencia más reciente dotnet test :

  1. Agregue la sección test a su archivo global.json, como se muestra arriba.
  2. Quite la TestingPlatformDotnetTestSupport propiedad de MSBuild, ya que ya no es necesaria.
  3. Quita TestingPlatformCaptureOutput y TestingPlatformShowTestsFailure las propiedades de MSBuild, ya que el nuevo dotnet test ya no las utiliza.
  4. Quite el extra --, por ejemplo dotnet test -- --report-trx , debe convertirse en dotnet test --report-trx.
  5. Si pasa una solución específica (o directorio que contiene la solución), por ejemplo, dotnet test MySolution.sln, debe convertirse en dotnet test --solution MySolution.sln.
  6. Si pasa un proyecto específico (o directorio que contiene el proyecto), por ejemplo, dotnet test MyProject.csproj, debe convertirse en dotnet test --project MyProject.csproj.
  7. Si pasa un archivo DLL específico, por ejemplo, dotnet test path/to/UnitTests.dll, debe convertirse en dotnet test --test-modules path/to/UnitTests.dll. Tenga en cuenta que --test-modules también admite el globbing.