Compartir por


Escritura de pruebas con MSTest

En este artículo, obtendrá información sobre las API y convenciones que usa MSTest para ayudarle a escribir y dar forma a las pruebas.

Nota:

Los nombres de atributo que terminan con "Attribute" pueden usar el formato corto. TestClass y TestClassAttribute son equivalentes. Los atributos con constructores sin parámetros pueden omitir paréntesis.

Estructura de prueba

Cada clase de prueba de MSTest debe tener el TestClass atributo y todos los métodos de prueba deben tener el TestMethod atributo :

using Microsoft.VisualStudio.TestTools.UnitTesting;

[TestClass]
public class CalculatorTests
{
    [TestMethod]
    public void Add_TwoNumbers_ReturnsSum()
    {
        // Arrange
        var calculator = new Calculator();

        // Act
        var result = calculator.Add(2, 3);

        // Assert
        Assert.AreEqual(5, result);
    }
}

TestClassAttribute

El TestClassAttribute marca una clase que contiene pruebas y, opcionalmente, métodos para inicializar o limpiar. Puede ampliar este atributo para personalizar el comportamiento de la clase de prueba.

TestMethodAttribute

TestMethodAttribute marca un método como una prueba que se va a ejecutar. Los métodos de prueba deben ser:

  • Métodos de instancia (no estáticos)
  • Público
  • Devolver void, Task, o ValueTask (MSTest v3.3+)
  • Sin parámetros, a menos que se usen atributos controlados por datos
[TestClass]
public class TestMethodExamples
{
    [TestMethod]
    public void SynchronousTest()
    {
        Assert.IsTrue(true);
    }

    [TestMethod]
    public async Task AsynchronousTest()
    {
        await Task.Delay(100);
        Assert.IsTrue(true);
    }
}

Advertencia

No use async void para los métodos de prueba. Use async Task o async ValueTask en su lugar.

DiscoverInternalsAttribute

El DiscoverInternalsAttribute atributo de ensamblado permite a MSTest detectar internal clases y métodos de prueba. De forma predeterminada, solo se detectan public pruebas. Este atributo es especialmente útil cuando se han parametrizado las pruebas que usan tipos internos como parámetros:

[assembly: DiscoverInternals]

internal record TestInput(int Value, string Description);

[TestClass]
public class CalculatorTests
{
    internal static IEnumerable<TestInput> TestData
    {
        get
        {
            yield return new TestInput(1, "one");
            yield return new TestInput(2, "two");
        }
    }

    [TestMethod]
    [DynamicData(nameof(TestData))]
    internal void Add_WithTestInput_ReturnsExpected(TestInput input)
    {
        var calculator = new Calculator();
        var result = calculator.Add(input.Value, 1);
        Assert.AreEqual(input.Value + 1, result);
    }
}

Sin DiscoverInternals, el ejecutor de pruebas no detectaría el método de prueba y su tipo de parámetro interno TestInput .

Conceptos básicos

La documentación de MSTest está organizada por tema:

Tema Description
Aserciones Verificar los resultados esperados con las clases Assert
Pruebas controladas por datos Ejecutar pruebas con varias entradas (DataRow, DynamicData)
Ciclo de vida de las pruebas Configuración y limpieza en los niveles de ensamblado, clase y prueba
Control de ejecución Subprocesos, paralelización, tiempos de espera, reintentos y ejecución condicional
Organización de prueba Categorías, prioridades, propietarios y metadatos
TestContext Acceder a la información de tiempo de ejecución de las pruebas

Referencia rápida de atributos

Categoría Atributos Vea
Identificación de pruebas TestClass, , TestMethod, DiscoverInternals Esta página
Controlado por datos DataRow, , DynamicData, TestDataRow Pruebas controladas por datos
Lifecycle AssemblyInitialize, ClassInitialize, TestInitialize y sus homólogos de limpieza Ciclo de vida de las pruebas
Threading STATestClass, , STATestMethod, UITestMethod Control de ejecución
Paralelización Parallelize, DoNotParallelize Control de ejecución
Tiempo de espera/Reintento Timeout, Retry Control de ejecución
Condicional Ignore, , OSCondition, CICondition Control de ejecución
Metadatos TestCategory, TestProperty, , Owner, Priority Organización de prueba
Seguimiento del trabajo WorkItem, GitHubWorkItem Organización de prueba

Aserciones

Utilice las clases Assert del espacio de nombres Microsoft.VisualStudio.TestTools.UnitTesting para comprobar la funcionalidad específica. Un método de prueba prueba el código de tu aplicación, pero solo informa sobre la corrección cuando incluyes sentencias Assert.

Las aserciones de MSTest se dividen en:

Prueba de miembros privados

Puede probar miembros privados mediante clases contenedoras de reflexión:

Sugerencia

Considere si los métodos privados necesitan pruebas directas. A menudo, las pruebas a través de interfaces públicas proporcionan una mejor cobertura y pruebas más fáciles de mantener.

Consulte también