dotnet test
Este artículo se aplica a: ✔️ SDK de .NET Core 2.1 y versiones posteriores
NOMBRE
dotnet test: controlador de prueba de .NET usado para ejecutar pruebas unitarias.
Sinopsis
dotnet test [<PROJECT> | <SOLUTION> | <DIRECTORY> | <DLL>]
[-a|--test-adapter-path <ADAPTER_PATH>] [--arch <ARCHITECTURE>]
[--blame] [--blame-crash]
[--blame-crash-dump-type <DUMP_TYPE>] [--blame-crash-collect-always]
[--blame-hang] [--blame-hang-dump-type <DUMP_TYPE>]
[--blame-hang-timeout <TIMESPAN>]
[-c|--configuration <CONFIGURATION>]
[--collect <DATA_COLLECTOR_NAME>]
[-d|--diag <LOG_FILE>] [-f|--framework <FRAMEWORK>]
[--filter <EXPRESSION>] [--interactive]
[-l|--logger <LOGGER>] [--no-build]
[--nologo] [--no-restore] [-o|--output <OUTPUT_DIRECTORY>] [--os <OS>]
[-r|--results-directory <RESULTS_DIR>] [--runtime <RUNTIME_IDENTIFIER>]
[-s|--settings <SETTINGS_FILE>] [-t|--list-tests]
[-v|--verbosity <LEVEL>] [[--] <RunSettings arguments>]
dotnet test -h|--help
Descripción
El comando dotnet test se usa para ejecutar pruebas unitarias en una solución determinada. El comando dotnet test compila la solución y ejecuta una aplicación host de prueba para cada proyecto de prueba de la solución. El host de prueba ejecuta las pruebas en el proyecto especificado mediante un marco de pruebas (por ejemplo, MSTest, NUnit o xUnit) e informa del éxito o el error de cada prueba. Si todas las pruebas son correctas, el ejecutor de pruebas devuelve 0 como un código de salida; en caso contrario, si se produce algún error en una prueba, devuelve 1.
En el caso de los proyectos con varios destinos, las pruebas se ejecutan para cada plataforma de destino. El host de pruebas y el marco de pruebas unitarias se empaquetan como paquetes NuGet y se restauran como dependencias ordinarias para el proyecto.
Los proyectos de prueba especifican el ejecutor de pruebas usando un elemento <PackageReference> ordinario, como se puede ver en este archivo de proyecto de ejemplo:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.0.0" />
<PackageReference Include="xunit" Version="2.4.1" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.3" />
</ItemGroup>
</Project>
Donde Microsoft.NET.Test.Sdk es el host de prueba y xunit es el marco de pruebas. Y xunit.runner.visualstudio es un adaptador de prueba, que permite que el marco xUnit funcione con el host de prueba.
Restauración implícita
No es necesario ejecutar dotnet restore porque lo ejecutan implícitamente todos los comandos que necesitan que se produzca una restauración, como dotnet new, dotnet build, dotnet run, dotnet test, dotnet publish y dotnet pack. Para deshabilitar la restauración implícita, use la opción --no-restore.
El comando dotnet restore sigue siendo válido en algunos escenarios donde tiene sentido realizar una restauración explícita, como las compilaciones de integración continua en Azure DevOps Services o en los sistemas de compilación que necesitan controlar explícitamente cuándo se produce la restauración.
Para obtener información sobre cómo administrar fuentes de NuGet, vea la documentación de dotnet restore.
Descargas de manifiestos de cargas de trabajo
Cuando se ejecuta, este comando inicia una descarga asincrónica en segundo plano de manifiestos de publicidad de cargas de trabajo. Si la descarga no ha terminado cuando finaliza el comando, se detiene. Para obtener más información, vea Manifiestos de publicidad.
Argumentos
PROJECT | SOLUTION | DIRECTORY | DLL- Ruta de acceso al proyecto de prueba.
- Ruta de acceso a la solución.
- Ruta de acceso a un directorio que contiene un proyecto o una solución.
- Ruta de acceso a un archivo .dll del proyecto de prueba.
Si no se especifica, se busca un proyecto o una solución en el directorio actual.
Opciones
-a|--test-adapter-path <ADAPTER_PATH>Ruta de acceso a un directorio en el que se van hacer búsquedas de adaptadores de prueba adicionales. Solo se inspeccionan los archivos .dll con el sufijo
.TestAdapter.dll. Si no se especifica, la búsqueda se realiza en el directorio del archivo .dll de la prueba.
--arch <ARCHITECTURE>Especifica la arquitectura de destino. Se trata de una sintaxis abreviada para establecer el identificador del entorno de ejecución (RID), donde el valor proporcionado se combina con el RID predeterminado. Por ejemplo, en un equipo
win-x64, al especificar--arch x86se establece el RID enwin-x86. Si usa esta opción, no use la opción-r|--runtime. Disponible a partir de .NET 6 (versión preliminar 7).
--blameEjecuta las pruebas en el modo de culpabilidad. Esta opción es útil para aislar las pruebas problemáticas que hacen que el host de prueba se bloquee. Cuando se detecta un bloqueo, crea un archivo de secuencia en
TestResults/<Guid>/<Guid>_Sequence.xmlque captura el orden de las pruebas ejecutadas antes del bloqueo.--blame-crash(Disponible a partir del SDK de .NET 5.0)Ejecuta las pruebas en modo de culpa y recopila un volcado de memoria cuando el host de prueba se cierra de forma inesperada. Esta opción depende de la versión de .NET que se use, del tipo de error y del sistema operativo.
En el caso de las excepciones en el código administrado, se recopilará automáticamente un volcado de memoria en .NET 5.0 y versiones posteriores. Generará un volcado de memoria para el host de prueba o cualquier proceso secundario que también se haya ejecutado en .NET 5.0 y se haya bloqueado. Los bloqueos en código nativo no generarán volcado de memoria. Esta opción funciona en Windows, macOS y Linux.
Los volcados de memoria en código nativo o cuando se usa .NET Core 3.1 o versiones anteriores solo se pueden recopilar en Windows, mediante Procdump. Un directorio que contenga procdump.exe y procdump64.exe debe estar en la variable de entorno PATH o PROCDUMP_PATH. Descargue las herramientas. Implica
--blame.Para recopilar un volcado de memoria de una aplicación nativa que se ejecuta en .NET 5.0 o una versión posterior, se puede establecer la variable de entorno
VSTEST_DUMP_FORCEPROCDUMPen1para forzar el uso de Procdump.--blame-crash-dump-type <DUMP_TYPE>(Disponible a partir del SDK de .NET 5.0)El tipo de volcado de memoria que se va a recopilar. Implica
--blame-crash.--blame-crash-collect-always(Disponible a partir del SDK de .NET 5.0)Recopila un volcado de memoria en la salida de host de prueba esperada e inesperada.
--blame-hang(Disponible a partir del SDK de .NET 5.0)Ejecute las pruebas en modo de culpa y recopile un volcado de bloqueo cuando una prueba supere el tiempo de espera especificado.
--blame-hang-dump-type <DUMP_TYPE>(Disponible a partir del SDK de .NET 5.0)El tipo de volcado de memoria que se va a recopilar. Debe ser
full,minionone. Cuando se especificanone, el host de prueba finaliza en el tiempo de espera, pero no se recopila ningún volcado. Implica--blame-hang.--blame-hang-timeout <TIMESPAN>(Disponible a partir del SDK de .NET 5.0)Tiempo de espera por prueba, después del cual se desencadena un volcado de bloqueo y se genera un volcado de memoria del proceso de host de prueba y todos sus procesos secundarios y se finalizan. El valor de tiempo de espera se especifica en uno de los siguientes formatos:
- 1.5h, 1.5hour, 1.5hours
- 90m, 90min, 90minute, 90minutes
- 5400s, 5400sec, 5400second, 5400seconds
- 5400000ms, 5400000mil, 5400000millisecond, 5400000milliseconds
Cuando no se usa ninguna unidad (por ejemplo, 5 400 000), se supone que el valor está en milisegundos. Cuando se usa junto con las pruebas basadas en datos, el comportamiento de tiempo de espera depende del adaptador de prueba usado. En xUnit y NUnit, el tiempo de espera se renueva después de cada caso de prueba. En MSTest, el tiempo de espera se usa en todos los casos de prueba. Esta opción se admite en Windows con netcoreapp2.1 y versiones posteriores, en Linux con netcoreapp3.1 y versiones posteriores y en macOS con net5.0 o versiones posteriores. Implica
--blamey--blame-hang.
-c|--configuration <CONFIGURATION>Define la configuración de compilación. El valor predeterminado para la mayoría de los proyectos es
Debug, pero puede invalidar los valores de configuración de compilación en el proyecto.
--collect <DATA_COLLECTOR_NAME>Habilita el recopilador de datos para la ejecución de pruebas. Para obtener más información, consulte Monitor and analyze test run (Supervisar y analizar ejecuciones de pruebas).
Para recopilar la cobertura de código en cualquier plataforma compatible con .NET Core, instale Coverlet y use la opción
--collect:"XPlat Code Coverage".En Windows, puede recopilar la cobertura de código mediante la opción
--collect "Code Coverage". Esta opción genera un archivo .coverage, que se puede abrir en Visual Studio 2019 Enterprise. Para más información, vea Uso de cobertura de código y Personalización del análisis de cobertura de código.-d|--diag <LOG_FILE>Habilita el modo de diagnóstico de la plataforma de prueba y escribe mensajes de diagnóstico en el archivo especificado y en los archivos que hay junto a él. El proceso que registra los mensajes determina qué archivos se crean, como
*.host_<date>.txtpara el registro del host de prueba y*.datacollector_<date>.txtpara el registro del recopilador de datos.-f|--framework <FRAMEWORK>Fuerza el uso del host de prueba de
dotneto .NET Framework para los archivos binarios de prueba. Esta opción solo determina el tipo de host que se va a usar. La versión de Framework real que se va a usar viene determinada por runtimeConfig.json del proyecto de prueba. Si no se especifica, se usa el atributo de ensamblado TargetFramework para determinar el tipo de host. Si ese atributo se quita de .dll, se usa el host de .NET Framework.--filter <EXPRESSION>Filtra las pruebas del proyecto actual con la expresión dada. Para más información, consulte la sección Detalles de la opción de filtro. Para obtener más información y ejemplos sobre cómo usar el filtrado de pruebas unitarias selectivas, vea Ejecución de pruebas unitarias selectivas.
-?|-h|--helpImprime una descripción de cómo usar el comando.
--interactivePermite que el comando se detenga y espere una entrada o una acción del usuario. Por ejemplo, para completar la autenticación. Disponible desde el SDK de .NET Core 3.0.
-l|--logger <LOGGER>Especifica un registrador para los resultados de pruebas. A diferencia de MSBuild, la prueba de dotnet no acepta abreviaturas: en lugar de
-l "console;v=d"use-l "console;verbosity=detailed". Especifique el parámetro varias veces para habilitar varios registradores.--no-buildNo compila el proyecto de prueba antes de ejecutarlo. También establece la marca -
--no-restorede forma implícita.--nologoEjecuta pruebas sin mostrar la pancarta de Microsoft TestPlatform. Disponible desde el SDK de .NET Core 3.0.
--no-restoreNo ejecuta una restauración implícita al ejecutar el comando.
-o|--output <OUTPUT_DIRECTORY>Directorio donde se encuentran los archivos binarios que se ejecutarán. Si no se especifica la ruta de acceso predeterminada es
./bin/<configuration>/<framework>/. En el caso de los proyectos con varias plataformas de destino (a través de la propiedadTargetFrameworks), también debe definir--frameworkal especificar esta opción.dotnet testsiempre ejecuta las pruebas desde el directorio de salida. Puede usar AppDomain.BaseDirectory para consumir recursos de prueba en el directorio de salida.
--os <OS>Especifica el sistema operativo (SO) de destino. Se trata de una sintaxis abreviada para establecer el identificador del entorno de ejecución (RID), donde el valor proporcionado se combina con el RID predeterminado. Por ejemplo, en un equipo
win-x64, al especificar--os osse establece el RID enos-x64. Si usa esta opción, no use la opción-r|--runtime. Disponible a partir de .NET 6 (versión preliminar 7).
-r|--results-directory <RESULTS_DIR>El directorio donde se guardarán los resultados de pruebas. Si el directorio especificado no existe, se crea. El valor predeterminado es
TestResultsen el directorio que contiene el archivo del proyecto.--runtime <RUNTIME_IDENTIFIER>Runtime de destino que probar.
-s|--settings <SETTINGS_FILE>El archivo
.runsettingsque se usará para ejecutar las pruebas. El elementoTargetPlatform(x86|x64) no tiene ningún efecto endotnet test. Para ejecutar pruebas destinadas a x86, instale la versión x86 de .NET Core. El valor de bits de dotnet.exe que se encuentra en la ruta de acceso es lo que se usará para ejecutar las pruebas. Para obtener más información, vea los siguientes recursos:-t|--list-testsEnumera las pruebas detectadas en vez de ejecutar las pruebas.
-v|--verbosity <LEVEL>Establece el nivel de detalle del comando. Los valores permitidos son
q[uiet],m[inimal],n[ormal],d[etailed]ydiag[nostic]. De manera predeterminada, esminimal. Para obtener más información, vea LoggerVerbosity.
- Argumentos de
RunSettings
Los argumentos RunSettings insertados se pasan como los últimos argumentos en la línea de comandos después de "-- " (fíjese en el espacio después de --). Los argumentos RunSettings insertados se especifican como pares de [name]=[value]. Se usa un espacio para separar varios pares de [name]=[value].
Ejemplo: dotnet test -- MSTest.DeploymentEnabled=false MSTest.MapInconclusiveToFailed=True
Para obtener más información, vea Paso de argumentos de RunSettings a través de la línea de comandos.
Ejemplos
Ejecución de las pruebas en el proyecto en el directorio actual:
dotnet testEjecute las pruebas en el proyecto
test1:dotnet test ~/projects/test1/test1.csprojEjecute las pruebas del proyecto en el directorio actual y genere un archivo de resultados de prueba en formato trx:
dotnet test --logger trxEjecute las pruebas del proyecto en el directorio actual y genere un archivo de cobertura de código (después de instalar la integración de recopiladores de Coverlet):
dotnet test --collect:"XPlat Code Coverage"Ejecute las pruebas en el proyecto en el directorio actual y genere un archivo de cobertura de código (solo en Windows):
dotnet test --collect "Code Coverage"Ejecute las pruebas del proyecto en el directorio actual y regístrese con el nivel de detalle pormenorizado en la consola:
dotnet test --logger "console;verbosity=detailed"Ejecute las pruebas del proyecto en el directorio actual e informe de las pruebas que estaban en curso cuando se bloqueó el host de prueba:
dotnet test --blame
Detalles de la opción de filtro
--filter <EXPRESSION>
<Expression> tiene el formato <property><operator><value>[|&<Expression>].
<property> es un atributo del tipo Test Case. Las siguientes son las propiedades admitidas por los marcos de pruebas unitarias populares:
| Marco de prueba | Propiedades admitidas |
|---|---|
| MSTest |
|
| xUnit |
|
| NUnit |
|
<operator> describe la relación entre la propiedad y el valor:
| Operador | Función |
|---|---|
= |
Coincidencia exacta |
!= |
Coincidencia no exacta |
~ |
Contiene |
!~ |
No contiene |
<value> es una cadena. Todas las búsquedas distinguen mayúsculas de minúsculas.
Una expresión sin <operator> automáticamente se considera un contains en la propiedad FullyQualifiedName (por ejemplo, dotnet test --filter xyz es lo mismo que dotnet test --filter FullyQualifiedName~xyz).
Las expresiones se pueden combinar con operadores condicionales:
| Operador | Función |
|---|---|
| |
O |
& |
AND |
Si usa operadores condicionales (por ejemplo, (Name~TestMethod1) | (Name~TestMethod2)), puede incluir las expresiones entre paréntesis.
Para obtener más información y ejemplos sobre cómo usar el filtrado de pruebas unitarias selectivas, vea Ejecución de pruebas unitarias selectivas.