Compartir vía


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.

Runsettings

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 Default 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 False Puede especificar rutas de acceso a más ensamblados cuando busque y ejecute 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 true 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)
ClassCleanupTimeout 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.
ConsiderFixturesAsSpecialTests False 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.
DeleteDeploymentDirectoryAfterTestRunIsComplete true Para conservar el directorio de implementación después de una serie de pruebas, establezca este valor en false.
DeploymentEnabled true 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 true Valor que indica si se van a implementar las referencias del origen de la prueba.
EnableBaseClassTestMethodsFromOtherAssemblies true 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 False 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 False 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 true Valor que indica si se asignará a la prueba con errores un resultado no ejecutable.
OrdenarPruebasPorNombreEnClase False 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.
Parallelize 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>
SettingsFile Puede especificar un archivo de configuración de pruebas para usarlo con el adaptador MSTest aquí. También puede especificarlo 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 False Para ver los problemas en las limpiezas de clases como errores, establezca este valor en true.
TreatDiscoveryWarningsAsErrors False 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 Default Descripción
ordenarPruebasPorNombreEnClase False 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 true 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 de AssemblyResolution

Entrada Default Descripción
Caminos Ninguno Puede especificar rutas de acceso a más ensamblados cuando busque y ejecute 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" }.

Configuración de implementación

Entrada Default Descripción
borrarDirectorioDeDespliegueDespuésDeQueLaPruebaFinalice true Para conservar el directorio de implementación después de una serie de pruebas, establezca este valor en false.
deployTestSourceDependencies true Indica si las referencias de fuente de prueba deben ser implementadas.
enabled true 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.

Configuración de salida

Entrada Default Descripción
captureTrace False 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.

Configuración del paralelismo

Entrada Default Descripción
enabled False Habilite la paralelización de pruebas.
scope 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 subprocesos o trabajos que se usarán para la paralelización. El valor predeterminado se asigna al número de procesadores de la máquina actual.

Configuración de ejecución

Entrada Default Descripción
considerarFuenteDeDatosVacíaComoInconclusa False Cuando se establece en true, un origen de datos vacío se considera inconcluso.
considerFixturesAsSpecialTests False 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 False 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 true Valor que indica si se asignará a la prueba con errores un resultado no ejecutable.
treatClassAndAssemblyCleanupWarningsAsErrors False Para ver los problemas en las limpiezas de clases como errores, establezca este valor en true.
treatDiscoveryWarningsAsErrors False Para notificar advertencias de detección de pruebas como errores, establezca este valor en true.

Configuración de tiempo de espera

Entrada Default 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.
test 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 False 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 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
    }
  }
}