Nota
O acceso a esta páxina require autorización. Pode tentar iniciar sesión ou modificar os directorios.
O acceso a esta páxina require autorización. Pode tentar modificar os directorios.
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, oValueTask(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:
-
Assertclase: aserciones de uso general (AreEqual,IsTrue,ThrowsException) -
StringAssertclase: aserciones específicas de cadena (Contains,Matches,StartsWith) -
CollectionAssertclase: aserciones de colección (Contains,AllItemsAreUnique,AreEquivalent)
Prueba de miembros privados
Puede probar miembros privados mediante clases contenedoras de reflexión:
- PrivateObject: para los métodos de instancia privada
- PrivateType: para los métodos estáticos privados
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.