Compartir a través de


Configuración de MSTest

MSTest, Microsoft Testing Framework, es un marco de pruebas para aplicaciones .NET. Permite escribir y ejecutar pruebas y proporcionar conjuntos de pruebas con integración en Visual Studio y Exploradores de pruebas de Visual Studio Code, la CLI de .NET y muchas canalizaciones de CI.

MSTest es un marco de pruebas totalmente compatible, de código abierto y multiplataforma que funciona con todos los destinos de .NET compatibles (.NET Framework, .NET Core, .NET, .NET, UWP, WinUI, etc.) hospedados en GitHub.

Configuración de ejecución

Se puede usar un archivo .runsettings para configurar cómo se ejecutan las pruebas unitarias. Para obtener más información sobre los runsettings y las configuraciones relacionadas con la plataforma, puede consultar la documentación sobre los runsettings de VSTest o la documentación sobre los runsettings de MSTest.

Elemento MSTest

Las siguientes entradas de runsettings permiten configurar cómo se comporta MSTest.

Configuración Valor predeterminado Valores
AssemblyCleanupTimeout 0 Especifique globalmente el tiempo de espera que se aplicará en cada instancia del método de limpieza de ensamblados. El atributo [Timeout] especificado en el método de limpieza de ensamblados invalida el tiempo de espera global.
AssemblyInitializeTimeout 0 Especifique globalmente el tiempo de espera que se aplicará en cada instancia del método de inicialización del ensamblado. El atributo [Timeout] especificado en el método de inicialización del ensamblado invalida el tiempo de espera global.
AssemblyResolution Falso Puede especificar rutas a ensamblados adicionales al buscar y ejecutar pruebas unitarias. Por ejemplo, puede utilizar estas rutas de acceso para los ensamblados de dependencias que no estén en el mismo directorio que el ensamblado de pruebas. Para especificar una ruta de acceso, use un elemento Directory Path. Las rutas de acceso pueden incluir variables de entorno.

<AssemblyResolution> <Directory path="D:\myfolder\bin\" includeSubDirectories="false"/> </AssemblyResolution>

Esta característica solo se aplica al usar un destino de .NET Framework.
CaptureTraceOutput cierto Capture mensajes de texto procedentes de las API de Console.Write*, Trace.Write*y Debug.Write* que se asociarán a la prueba en ejecución actual.
ClassCleanupLifecycle EndOfClass Si quiere que la limpieza de clases se produzca al final del ensamblado, establezca este valor en EndOfAssembly. (Ya no se admite a partir de MSTest v4, ya que EndOfClass es el comportamiento de limpieza de clase predeterminado, aparte del único)
Tiempo de espera para la limpieza de la clase 0 Especifique globalmente el tiempo de espera que se aplicará en cada instancia del método de limpieza de clases. El atributo [Timeout] especificado en el método de limpieza de clases invalida el tiempo de espera global.
ClassInitializeTimeout 0 Especifique globalmente el tiempo de espera que se aplicará en cada instancia del método de inicialización de clase. El atributo [Timeout] especificado en el método de inicialización de la clase invalida el tiempo de espera global.
Considerar las configuraciones como pruebas especiales Falso Para mostrar AssemblyInitialize, AssemblyCleanup, ClassInitialize, ClassCleanup como entradas individuales en Visual Studio y Visual Studio Code Test Explorer y registro .trx, establezca este valor en true.
EliminarDirectorioDeDespliegueDespuésDeQueLaPruebaTermine cierto Para conservar el directorio de implementación después de una serie de pruebas, establezca este valor en false.
ImplementaciónHabilitada cierto Si el valor se establece en false, los elementos de implementación especificados en el método de prueba no se copian al directorio de implementación.
DeployTestSourceDependencies cierto Valor que indica si se van a implementar las referencias del origen de la prueba.
EnableBaseClassTestMethodsFromOtherAssemblies cierto Valor que indica si se va a habilitar la detección de métodos de prueba desde clases base en un ensamblado diferente desde la clase de prueba heredada.
ForcedLegacyMode Falso En versiones anteriores de Visual Studio, el adaptador MSTest se optimizó para que fuera más rápido y escalable. Es posible que parte del comportamiento, como el orden en que se ejecutan las pruebas, no sea exactamente igual que en ediciones anteriores de Visual Studio. Establezca este valor en true para utilizar el adaptador de pruebas más antiguo.

Por ejemplo, es posible usar este valor si tiene un archivo app.config especificado para una prueba unitaria.

Se recomienda que considere la refactorización de las pruebas para poder usar el adaptador más reciente.
MapInconclusiveToFailed Falso Si una prueba finaliza un estado no concluyente, se le asigna el estado Omitido en el Explorador de pruebas. Si quiere que las pruebas no concluyentes se muestren como Error, establezca el valor en true.
MapearNoEjecutableAFallido cierto Un valor que indica si un resultado no ejecutable se asigna a una prueba fallida.
OrdenarPruebasPorNombreEnClase Falso Si desea ejecutar pruebas por nombres de prueba en los Exploradores de pruebas y en la línea de comandos, establezca este valor en true.
Paralelización Se usa para establecer la configuración de paralelización:

Workers: número de subprocesos o trabajos que se usarán para la paralelización, que es de forma predeterminada el número de procesadores de la máquina actual.

SCOPE: ámbito de paralelización. Puede establecerlo en MethodLevel. De forma predeterminada, es ClassLevel.

<Parallelize><Workers>32</Workers><Scope>MethodLevel</Scope></Parallelize>
ArchivoDeConfiguración Puede especificar un archivo de configuración de pruebas para usarlo con el adaptador MSTest aquí. También puede especificar un archivo de configuración de pruebas en el menú Configuración.

Si especifica este valor, también debe establecer ForcedLegacyMode en true.

<ForcedLegacyMode>true</ForcedLegacyMode>
TestCleanupTimeout 0 Especifique globalmente el tiempo de espera que se aplicará en cada instancia del método de limpieza de pruebas. El atributo [Timeout] especificado en el método de limpieza de pruebas invalida el tiempo de espera global.
TestInitializeTimeout 0 Especifique globalmente el tiempo de espera que se aplicará en cada instancia del método de inicialización de prueba. El atributo [Timeout] especificado en el método de inicialización de prueba invalida el tiempo de espera global .
TestTimeout 0 Obtiene el tiempo de espera del caso de prueba global especificado.
TreatClassAndAssemblyCleanupWarningsAsErrors Falso Para ver los problemas en las limpiezas de clases como errores, establezca este valor en true.
TratarAdvertenciasDeDescubrimientoComoErrores Falso Para notificar advertencias de detección de pruebas como errores, establezca este valor en true.

Elemento TestRunParameter

<TestRunParameters>
    <Parameter name="webAppUrl" value="http://localhost" />
</TestRunParameters>

Los parámetros de la serie de pruebas proporcionan una manera de definir las variables y los valores que están disponibles para las pruebas en tiempo de ejecución. Acceda a los parámetros mediante la propiedad MSTest TestContext.Properties:

private string _appUrl;
public TestContext TestContext { get; set; }

[TestMethod]
public void HomePageTest()
{
    string _appUrl = TestContext.Properties["webAppUrl"];
}

Para usar parámetros de serie de pruebas, agregue una propiedad TestContext pública a la clase de prueba.

Archivo de ejemplo .runsettings

El siguiente XML muestra el contenido de un archivo .runsettings típico. Copie el código y edítelo para satisfacer sus necesidades.

Cada elemento del archivo es opcional, porque cada valor tiene un valor predeterminado.

<?xml version="1.0" encoding="utf-8"?>
<RunSettings>

  <!-- Parameters used by tests at run time -->
  <TestRunParameters>
    <Parameter name="webAppUrl" value="http://localhost" />
    <Parameter name="webAppUserName" value="Admin" />
    <Parameter name="webAppPassword" value="Password" />
  </TestRunParameters>

  <!-- MSTest -->
  <MSTest>
    <MapInconclusiveToFailed>True</MapInconclusiveToFailed>
    <CaptureTraceOutput>false</CaptureTraceOutput>
    <DeleteDeploymentDirectoryAfterTestRunIsComplete>False</DeleteDeploymentDirectoryAfterTestRunIsComplete>
    <DeploymentEnabled>False</DeploymentEnabled>
    <ConsiderFixturesAsSpecialTests>False</ConsiderFixturesAsSpecialTests>
    <AssemblyResolution>
      <Directory path="D:\myfolder\bin\" includeSubDirectories="false"/>
    </AssemblyResolution>
  </MSTest>

</RunSettings>

testconfig.json

Al ejecutar las pruebas con MSTest, puede usar un archivo testconfig.json para configurar el comportamiento del ejecutor de pruebas. El archivo testconfig.json es un archivo JSON que contiene los valores de configuración del ejecutor de pruebas. El archivo se usa para configurar el ejecutor de pruebas y el entorno de ejecución de pruebas. Para obtener más información, consulte la documentación de Microsoft.Testing.Platform testconfig.json.

A partir de MSTest 3.7, también puede configurar las ejecuciones de MSTest en el mismo archivo de configuración. En las secciones siguientes se describen la configuración que puede usar en el archivo testconfig.json.

Elemento MSTest

La configuración de MSTest se agrupa por funcionalidad que se describe en las secciones siguientes.

Entrada Valor predeterminado Descripción
ordenarPruebasPorNombreEnClase Falso Si desea ejecutar pruebas por nombres de prueba en los Exploradores de pruebas y en la línea de comandos, establezca este valor en true.
enableBaseClassTestMethodsFromOtherAssemblies cierto Valor que indica si se va a habilitar la detección de métodos de prueba desde clases base en un ensamblado diferente desde la clase de prueba heredada.
classCleanupLifecycle EndOfAssembly Si desea que la limpieza de clases se produzca al final de la clase, establézcala en EndOfClass.

Configuración deassemblyResolution

Todos los valores de esta sección pertenecen al elemento assemblyResolution.

Entrada Valor predeterminado Descripción
Caminos Ninguno Puede especificar rutas a ensamblados adicionales al buscar y ejecutar pruebas unitarias. Por ejemplo, puede utilizar estas rutas de acceso para los ensamblados de dependencias que no estén en el mismo directorio que el ensamblado de pruebas. Puede especificar una ruta de acceso en la forma { "path": "...", "includeSubDirectories": "true/false" }.

Ejemplo:

{
  "mstest": {
    "assemblyResolution": {
        { "path": "...", "includeSubDirectories": "true/false" }
    }
  }
}

Configuración dedeployment

Todos los valores de esta sección pertenecen al elemento deployment.

Entrada Valor predeterminado Descripción
borrarDirectorioDeDespliegueDespuésDeQueLaPruebaFinalice cierto Para conservar el directorio de implementación después de una serie de pruebas, establezca este valor en false.
deployTestSourceDependencies cierto Indica si las referencias de fuente de prueba deben ser implementadas.
Habilitado cierto Si el valor se establece en false, los elementos de implementación especificados en el método de prueba no se copian al directorio de implementación.

Ejemplo:

{
  "mstest": {
    "deployment": {
        "deleteDeploymentDirectoryAfterTestRunIsComplete": true,
        "deployTestSourceDependencies": true,
        "enabled": true
    }
  }
}

Configuración deoutput

Todos los valores de esta sección pertenecen al elemento output.

Entrada Valor predeterminado Descripción
captureTrace cierto Capture mensajes de texto procedentes de las API de Console.Write*, Trace.Write*y Debug.Write* que se asociarán a la prueba en ejecución actual.

Ejemplo:

{
  "mstest": {
    "output": {
        "captureTrace": false
    }
  }
}

Configuración deparallelism

Todos los valores de esta sección pertenecen al elemento parallelism.

Entrada Valor predeterminado Descripción
Habilitado Falso Habilite la paralelización de pruebas.
alcance clase Ámbito de paralelización. Puede establecerlo en method. El valor predeterminado, class, corresponde a ejecutar todas las pruebas de una clase determinada secuencialmente, pero varias clases en paralelo.
trabajadores 0 Número de hilos o trabajadores que se usarán para la paralelización. El valor predeterminado se asigna al número de procesadores de la máquina actual.

Ejemplo:

{
  "mstest": {
    "parallelism": {
        "enabled": true,
        "scope": "method",
        "workers": 32
    }
  }
}

Configuración deexecution

Todos los valores de esta sección pertenecen al elemento execution.

Entrada Valor predeterminado Descripción
considerarFuenteDeDatosVacíaComoInconclusa Falso Cuando se establece en true, un origen de datos vacío se considera inconcluso.
considerFixturesAsSpecialTests Falso Para mostrar AssemblyInitialize, AssemblyCleanup, ClassInitialize, ClassCleanup como entradas individuales en Visual Studio y Visual Studio Code Test Explorer y registro .trx, establezca este valor en true.
mapInconclusiveToFailed Falso Si una prueba finaliza un estado no concluyente, se le asigna el estado Omitido en el Explorador de pruebas. Si quiere que las pruebas no concluyentes se muestren como Error, establezca el valor en true.
mapNotRunnableToFailed cierto Un valor que indica si un resultado no ejecutable se asigna a una prueba fallida.
treatClassAndAssemblyCleanupWarningsAsErrors Falso Para ver los problemas en las limpiezas de clases como errores, establezca este valor en true.
treatDiscoveryWarningsAsErrors Falso Para notificar advertencias de detección de pruebas como errores, establezca este valor en true.

Ejemplo:

{
  "mstest": {
    "execution": {
        "considerEmptyDataSourceAsInconclusive": false,
        "considerFixturesAsSpecialTests": false,
        "mapInconclusiveToFailed": true,
        "mapNotRunnableToFailed": true,
        "treatClassAndAssemblyCleanupWarningsAsErrors": false,
        "treatDiscoveryWarningsAsErrors": false
    }
  }
}

Configuración detimeout

Todos los valores de esta sección pertenecen al elemento timeout.

Entrada Valor predeterminado Descripción
assemblyCleanup 0 Especifique globalmente el tiempo de espera que se aplicará en cada instancia del método de limpieza de ensamblados.
assemblyInitialize 0 Especifique globalmente el tiempo de espera que se aplicará en cada instancia del método de inicialización del ensamblado.
classCleanup 0 Especifique globalmente el tiempo de espera que se aplicará en cada instancia del método de limpieza de clases.
classInitialize 0 Especifique globalmente el tiempo de espera que se aplicará en cada instancia del método de inicialización de clase.
prueba 0 Especifique el tiempo de espera de prueba globalmente.
testCleanup 0 Especifique globalmente el tiempo de espera que se aplicará en cada instancia del método de limpieza de pruebas.
testInitialize 0 Especifique globalmente el tiempo de espera que se aplicará en cada instancia del método de inicialización de prueba.
useCooperativeCancellation Falso Cuando se establece en true, en caso de agotarse el tiempo de espera, MSTest solo desencadenará la cancelación de CancellationToken, pero no dejará de observar el método. Este comportamiento es más eficaz, pero se basa en que el usuario fluya correctamente el token a través de todas las rutas de acceso.

Nota

El atributo [Timeout] especificado en un método invalida el tiempo de espera global. Por ejemplo, [Timeout(1000)] en un método marcado con [AssemblyCleanup] invalidará el tiempo de espera global assemblyCleanup.

Ejemplo:

{
  "mstest": {
    "timeout": {
        "assemblyCleanup": 0,
        "assemblyInitialize": 0,
        "classCleanup": 0,
        "classInitialize": 0,
        "test": 0,
        "testCleanup": 0,
        "testInitialize": 0,
        "useCooperativeCancellation": false
    }
  }
}

Ejemplo de archivo testconfig.json

El siguiente JSON muestra el contenido de un archivo .testconfig.json típico. Copie el código y edítelo para satisfacer sus necesidades.

Cada elemento del archivo es opcional, porque cada valor tiene un valor predeterminado.

{
  "platformOptions": {
  },
  "mstest": {
    "execution": {
        "mapInconclusiveToFailed" : true,
        "disableAppDomain": true,
        "considerFixturesAsSpecialTests" : false,
    },
    "parallelism" : {
        "enabled": true,
        "scope": "method",
    },
    "output": {
        "captureTrace": false
    }
  }
}