Eseguire unit test selezionati
Con il comando dotnet test
in .NET Core è possibile usare un'espressione filtro per eseguire test selezionati. Questo articolo illustra come filtrare i test. Negli esempi viene usato dotnet test
. Se si utilizza vstest.console.exe
, sostituire --filter
con --testcasefilter:
.
Sintassi
dotnet test --filter <Expression>
L'espressione è nel formato
<Property><Operator><Value>[|&<Expression>]
.Le espressioni possono essere unite con operatori booleani:
|
per booleano o,&
per booleano e.Le espressioni possono essere racchiuse tra parentesi. Ad esempio:
(Name~MyClass) | (Name~MyClass2)
.Un'espressione senza alcun operatore viene interpretata come contiene nella proprietà
FullyQualifiedName
. Ad esempio,dotnet test --filter xyz
è identico adotnet test --filter FullyQualifiedName~xyz
.Proprietà è un attributo di
Test Case
. Ad esempio, le seguenti proprietà sono supportate da framework diffusi per unit test.Framework di test Proprietà supportate MSTest FullyQualifiedName
Name
ClassName
Priority
TestCategory
xUnit FullyQualifiedName
DisplayName
Traits
Nunit FullyQualifiedName
Name
Priority
TestCategory
Operatori
=
corrispondenza esatta!=
corrispondenza non esatta~
contiene!~
non contiene
Il valore è una stringa. Per tutte le ricerche non viene fatta distinzione tra maiuscole e minuscole.
Escape di caratteri
Per usare un punto esclamativo (!
) in un'espressione filtro, è necessario eseguirne l'escape in alcune shell Linux o macOS inserendo una barra rovesciata davanti (\!
). Ad esempio, il filtro seguente ignora tutti i test in uno spazio dei nomi che contiene IntegrationTests
:
dotnet test --filter FullyQualifiedName\!~IntegrationTests
Per i valori FullyQualifiedName
che includono una virgola per i parametri di tipo generico, esegui l'escape della virgola con %2C
. Ad esempio:
dotnet test --filter "FullyQualifiedName=MyNamespace.MyTestsClass<ParameterType1%2CParameterType2>.MyTestMethod"
Esempi di 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()
{
}
}
}
Espressione | Risultato |
---|---|
dotnet test --filter Method |
Esegue i test il cui FullyQualifiedName contiene Method . |
dotnet test --filter Name~TestMethod1 |
Esegue i test il cui nome contiene TestMethod1 . |
dotnet test --filter ClassName=MSTestNamespace.UnitTest1 |
Esegue i test presenti nella classe MSTestNamespace.UnitTest1 .Nota: il valore ClassName deve avere uno spazio dei nomi, pertanto ClassName=UnitTest1 non funziona. |
dotnet test --filter FullyQualifiedName!=MSTestNamespace.UnitTest1.TestMethod1 |
Esegue tutti i test tranne MSTestNamespace.UnitTest1.TestMethod1 . |
dotnet test --filter TestCategory=CategoryA |
Esegue i test annotati con [TestCategory("CategoryA")] . |
dotnet test --filter Priority=2 |
Esegue i test annotati con [Priority(2)] . |
Esempi che usano gli operatori condizionali |
e &
:
Per eseguire test con
UnitTest1
o TestCategoryAttribute FullyQualifiedName è ."CategoryA"
dotnet test --filter "FullyQualifiedName~UnitTest1|TestCategory=CategoryA"
Per eseguire i test che includono
UnitTest1
FullyQualifiedName e hanno un TestCategoryAttribute di"CategoryA"
.dotnet test --filter "FullyQualifiedName~UnitTest1&TestCategory=CategoryA"
Per eseguire i test che contengono FullyQualifiedName
UnitTest1
e hanno o TestCategoryAttribute hanno un PriorityAttribute oggetto con"CategoryA"
priorità .1
dotnet test --filter "(FullyQualifiedName~UnitTest1&TestCategory=CategoryA)|Priority=1"
Esempi di 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()
{
}
}
}
Espressione | Risultato |
---|---|
dotnet test --filter DisplayName=XUnitNamespace.TestClass1.Test1 |
Esegue solo un test, XUnitNamespace.TestClass1.Test1 . |
dotnet test --filter FullyQualifiedName!=XUnitNamespace.TestClass1.Test1 |
Esegue tutti i test tranne XUnitNamespace.TestClass1.Test1 . |
dotnet test --filter DisplayName~TestClass1 |
Esegue i test il cui nome visualizzato contiene TestClass1 . |
Nell'esempio di codice, i tratti definiti con le chiavi "Category"
e "Priority"
possono essere utilizzati per il filtraggio.
Espressione | Risultato |
---|---|
dotnet test --filter XUnit |
Esegue i test il cui FullyQualifiedName contiene XUnit . |
dotnet test --filter Category=CategoryA |
Esegue test che includono [Trait("Category", "CategoryA")] . |
Esempi che usano gli operatori condizionali |
e &
:
Per eseguire i test che includono FullyQualifiedName
TestClass1
o hanno unTrait
oggetto con una chiave di"Category"
e il valore ."CategoryA"
dotnet test --filter "FullyQualifiedName~TestClass1|Category=CategoryA"
Per eseguire i test che includono FullyQualifiedName
TestClass1
e hanno unTrait
oggetto con una chiave di"Category"
e il valore di ."CategoryA"
dotnet test --filter "FullyQualifiedName~TestClass1&Category=CategoryA"
Per eseguire i test che contengono FullyQualifiedName
TestClass1
e hanno unTrait
oggetto con una chiave e"Category"
il valore di"CategoryA"
o hanno unTrait
oggetto con una chiave di"Priority"
e il valore di1
.dotnet test --filter "(FullyQualifiedName~TestClass1&Category=CategoryA)|Priority=1"
Esempi 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()
{
}
}
}
Espressione | Risultato |
---|---|
dotnet test --filter Method |
Esegue i test il cui FullyQualifiedName contiene Method . |
dotnet test --filter Name~TestMethod1 |
Esegue i test il cui nome contiene TestMethod1 . |
dotnet test --filter FullyQualifiedName~NUnitNamespace.UnitTest1 |
Esegue i test presenti nella classe NUnitNamespace.UnitTest1 . |
dotnet test --filter FullyQualifiedName!=NUnitNamespace.UnitTest1.TestMethod1 |
Esegue tutti i test tranne NUnitNamespace.UnitTest1.TestMethod1 . |
dotnet test --filter TestCategory=CategoryA |
Esegue i test annotati con [Category("CategoryA")] . |
dotnet test --filter Priority=2 |
Esegue i test annotati con [Priority(2)] . |
Esempi che usano gli operatori condizionali |
e &
:
Per eseguire i test che includono UnitTest1
FullyQualifiedName o hanno un Category
di "CategoryA"
.
dotnet test --filter "FullyQualifiedName~UnitTest1|TestCategory=CategoryA"
Per eseguire i test che includono UnitTest1
FullyQualifiedName e hanno un Category
di "CategoryA"
.
dotnet test --filter "FullyQualifiedName~UnitTest1&TestCategory=CategoryA"
Per eseguire i test che hanno un FullyQualifiedName oggetto contenente UnitTest1
e hanno o "CategoryA"
Category
hanno un Property
oggetto con un "Priority"
di .1
dotnet test --filter "(FullyQualifiedName~UnitTest1&TestCategory=CategoryA)|Priority=1"
Per altre informazioni, fai riferimento a Filtro TestCase.