Ejecución de pruebas unitarias seleccionadas
Con el comando dotnet test
en .NET Core, se puede usar una expresión de filtro para ejecutar las pruebas seleccionadas. En este artículo se explica cómo filtrar las pruebas. En los ejemplos se usa dotnet test
. Si está usando vstest.console.exe
, reemplace --filter
por --testcasefilter:
.
Sintaxis
dotnet test --filter <Expression>
Expression tiene el formato
<Property><Operator><Value>[|&<Expression>]
.Las expresiones se pueden unir con operadores booleanos:
|
para el booleano or y&
para el booleano and.Las expresiones pueden incluirse entre paréntesis. Por ejemplo:
(Name~MyClass) | (Name~MyClass2)
.Una expresión sin ningún operador se interpreta como elemento contains en la propiedad
FullyQualifiedName
. Por ejemplo,dotnet test --filter xyz
es lo mismo quedotnet test --filter FullyQualifiedName~xyz
.Property es un atributo de
Test Case
. Por ejemplo, las propiedades siguientes son compatibles con los marcos de pruebas unitarias populares.Marco de prueba Propiedades admitidas MSTest FullyQualifiedName
Name
ClassName
Priority
TestCategory
xUnit FullyQualifiedName
DisplayName
Traits
Nunit FullyQualifiedName
Name
Priority
TestCategory
Operadores
=
coincidencia exacta!=
coincidencia no exacta~
contiene!~
no contiene
Value es una cadena. Todas las búsquedas distinguen mayúsculas de minúsculas.
Escape de caracteres
Para usar un signo de exclamación (!
) en una expresión de filtro, aplíquele una secuencia de escape en algún shell de Linux o macOS mediante la colocación de una barra diagonal inversa delante (\!
). Por ejemplo, el filtro siguiente omite todas las pruebas de un espacio de nombres que contiene IntegrationTests
:
dotnet test --filter FullyQualifiedName\!~IntegrationTests
En el caso de los valores FullyQualifiedName
que incluyen una coma para los parámetros de tipo genérico, escape la coma con %2C
. Por ejemplo:
dotnet test --filter "FullyQualifiedName=MyNamespace.MyTestsClass<ParameterType1%2CParameterType2>.MyTestMethod"
Ejemplos de MSTest
using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace MSTestNamespace
{
[TestClass]
public class UnitTest1
{
[TestMethod, Priority(1), TestCategory("CategoryA")]
public void TestMethod1()
{
}
[TestMethod, Priority(2)]
public void TestMethod2()
{
}
}
}
Expresión | Resultado |
---|---|
dotnet test --filter Method |
Ejecuta pruebas cuyo FullyQualifiedName contenga Method . |
dotnet test --filter Name~TestMethod1 |
Ejecuta pruebas cuyo nombre contenga TestMethod1 . |
dotnet test --filter ClassName=MSTestNamespace.UnitTest1 |
Ejecuta pruebas que están en la clase MSTestNamespace.UnitTest1 .Nota: El valor ClassName debe tener un espacio de nombres, por lo que ClassName=UnitTest1 no funcionará. |
dotnet test --filter FullyQualifiedName!=MSTestNamespace.UnitTest1.TestMethod1 |
Ejecuta todas las pruebas excepto MSTestNamespace.UnitTest1.TestMethod1 . |
dotnet test --filter TestCategory=CategoryA |
Ejecuta pruebas anotadas con [TestCategory("CategoryA")] . |
dotnet test --filter Priority=2 |
Ejecuta pruebas anotadas con [Priority(2)] . |
Ejemplos de uso de los operadores condicionales |
y &
:
Para ejecutar pruebas que tienen
UnitTest1
en su FullyQualifiedName o TestCategoryAttribute es"CategoryA"
.dotnet test --filter "FullyQualifiedName~UnitTest1|TestCategory=CategoryA"
Para ejecutar pruebas que tienen
UnitTest1
en su FullyQualifiedName y tienen un elemento TestCategoryAttribute de"CategoryA"
.dotnet test --filter "FullyQualifiedName~UnitTest1&TestCategory=CategoryA"
Para ejecutar pruebas que tienen FullyQualifiedName con
UnitTest1
y tienen un valor TestCategoryAttribute de"CategoryA"
o tienen un elemento PriorityAttribute con una prioridad de1
.dotnet test --filter "(FullyQualifiedName~UnitTest1&TestCategory=CategoryA)|Priority=1"
Ejemplos de xUnit
using Xunit;
namespace XUnitNamespace
{
public class TestClass1
{
[Fact, Trait("Priority", "1"), Trait("Category", "CategoryA")]
public void Test1()
{
}
[Fact, Trait("Priority", "2")]
public void Test2()
{
}
}
}
Expresión | Resultado |
---|---|
dotnet test --filter DisplayName=XUnitNamespace.TestClass1.Test1 |
Ejecuta solo una prueba, XUnitNamespace.TestClass1.Test1 . |
dotnet test --filter FullyQualifiedName!=XUnitNamespace.TestClass1.Test1 |
Ejecuta todas las pruebas excepto XUnitNamespace.TestClass1.Test1 . |
dotnet test --filter DisplayName~TestClass1 |
Ejecuta pruebas cuyo nombre para mostrar contenga TestClass1 . |
En el ejemplo de código, los rasgos definidos con claves "Category"
y "Priority"
pueden usarse para filtrar.
Expresión | Resultado |
---|---|
dotnet test --filter XUnit |
Ejecuta pruebas cuyo FullyQualifiedName contenga XUnit . |
dotnet test --filter Category=CategoryA |
Ejecuta pruebas que tienen [Trait("Category", "CategoryA")] . |
Ejemplos de uso de los operadores condicionales |
y &
:
Para ejecutar pruebas que tienen
TestClass1
en su FullyQualifiedName o tienen un elementoTrait
con una clave de"Category"
y el valor de"CategoryA"
.dotnet test --filter "FullyQualifiedName~TestClass1|Category=CategoryA"
Para ejecutar pruebas que tienen
TestClass1
en su FullyQualifiedName y tienen un elementoTrait
con una clave de"Category"
y un valor de"CategoryA"
.dotnet test --filter "FullyQualifiedName~TestClass1&Category=CategoryA"
Para ejecutar pruebas que tienen FullyQualifiedName con
TestClass1
y tienen un elementoTrait
con una clave de"Category"
y un valor de"CategoryA"
o tienen un elementoTrait
con una clave de"Priority"
y un valor de1
.dotnet test --filter "(FullyQualifiedName~TestClass1&Category=CategoryA)|Priority=1"
Ejemplos de NUnit
using NUnit.Framework;
namespace NUnitNamespace
{
public class UnitTest1
{
[Test, Property("Priority", 1), Category("CategoryA")]
public void TestMethod1()
{
}
[Test, Property("Priority", 2)]
public void TestMethod2()
{
}
}
}
Expresión | Resultado |
---|---|
dotnet test --filter Method |
Ejecuta pruebas cuyo FullyQualifiedName contenga Method . |
dotnet test --filter Name~TestMethod1 |
Ejecuta pruebas cuyo nombre contenga TestMethod1 . |
dotnet test --filter FullyQualifiedName~NUnitNamespace.UnitTest1 |
Ejecuta pruebas que están en la clase NUnitNamespace.UnitTest1 . |
dotnet test --filter FullyQualifiedName!=NUnitNamespace.UnitTest1.TestMethod1 |
Ejecuta todas las pruebas excepto NUnitNamespace.UnitTest1.TestMethod1 . |
dotnet test --filter TestCategory=CategoryA |
Ejecuta pruebas anotadas con [Category("CategoryA")] . |
dotnet test --filter Priority=2 |
Ejecuta pruebas anotadas con [Priority(2)] . |
Ejemplos de uso de los operadores condicionales |
y &
:
Para ejecutar pruebas que tienen UnitTest1
en su FullyQualifiedName o tienen un elemento Category
de "CategoryA"
.
dotnet test --filter "FullyQualifiedName~UnitTest1|TestCategory=CategoryA"
Para ejecutar pruebas que tienen UnitTest1
en su FullyQualifiedName y tienen un elemento Category
de "CategoryA"
.
dotnet test --filter "FullyQualifiedName~UnitTest1&TestCategory=CategoryA"
Para ejecutar pruebas que tienen FullyQualifiedName con UnitTest1
y tienen un elemento Category
de "CategoryA"
o tienen un elemento Property
con un valor "Priority"
de 1
.
dotnet test --filter "(FullyQualifiedName~UnitTest1&TestCategory=CategoryA)|Priority=1"
Para obtener más información, vea Filtro TestCase.