Ausführen ausgewählter Komponententests
Mit dem Befehl dotnet test
in .NET Core können Sie einen Filterausdruck zum Ausführen ausgewählter Tests verwenden. In diesem Artikel wird veranschaulicht, wie Sie Tests filtern. Die Beispiele verwenden dotnet test
. Wenn Sie vstest.console.exe
verwenden, ersetzen Sie --filter
mit --testcasefilter:
.
Syntax
dotnet test --filter <Expression>
Der Ausdruck weist das Format
<Property><Operator><Value>[|&<Expression>]
auf.Ausdrücke können mit booleschen Operatoren verknüpft werden:
|
für boolesches or,&
für boolesches and.Ausdrücke können in Klammern eingeschlossen werden. Beispiel:
(Name~MyClass) | (Name~MyClass2)
.Ein Ausdruck ohne Operator wird als contains für die Eigenschaft
FullyQualifiedName
interpretiert.dotnet test --filter xyz
entspricht beispielsweisedotnet test --filter FullyQualifiedName~xyz
.Die Eigenschaft ist ein Attribut von
Test Case
. Beispielsweise werden die folgenden Eigenschaften von gängigen Komponententestframeworks unterstützt.Testframework Unterstützte Eigenschaften MSTest FullyQualifiedName
Name
ClassName
Priority
TestCategory
xUnit FullyQualifiedName
DisplayName
Traits
NUnit FullyQualifiedName
Name
Priority
TestCategory
Operatoren
-
=
: genaue Übereinstimmung -
!=
: keine genaue Übereinstimmung -
~
: enthält -
!~
: enthält nicht
-
Der Wert ist eine Zeichenfolge. Bei allen Suchvorgängen ist die Groß-/Kleinschreibung nicht relevant.
Escapezeichen
Um in einem Filterausdruck ein Ausrufezeichen (!
) zu verwenden, müssen Sie dieses in einigen Linux- oder macOS-Shells mit einem Escapezeichen versehen, indem Sie einen umgekehrten Schrägstrich davor setzen (\!
). Der folgende Filter überspringt beispielsweise alle Tests in einem Namespace, der IntegrationTests
enthält:
dotnet test --filter FullyQualifiedName\!~IntegrationTests
Für FullyQualifiedName
-Werte, die ein Komma für generische Typparameter enthalten, versehen Sie das Komma mit dem Escapezeichen %2C
. Zum Beispiel:
dotnet test --filter "FullyQualifiedName=MyNamespace.MyTestsClass<ParameterType1%2CParameterType2>.MyTestMethod"
Verwenden Sie für Name
oder DisplayName
die URL-Codierung für die Sonderzeichen. Wenn Sie beispielsweise einen Test mit dem Namen MyTestMethod
und einem Zeichenfolgenwert "text"
ausführen möchten, verwenden Sie den folgenden Filter:
dotnet test --filter "Name=MyTestMethod \(%22text%22\)"
MSTest-Beispiele
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()
{
}
}
}
expression | Ergebnis |
---|---|
dotnet test --filter Method |
Führt Tests aus, dessen FullyQualifiedNameMethod enthält. |
dotnet test --filter Name~TestMethod1 |
Führt Tests aus, dessen Name TestMethod1 enthält. |
dotnet test --filter ClassName=MSTestNamespace.UnitTest1 |
Führt Tests aus, die sich in der Klasse MSTestNamespace.UnitTest1 befinden.Hinweis: Der Wert ClassName muss einen Namespace besitzen, damit ClassName=UnitTest1 nicht funktioniert. |
dotnet test --filter FullyQualifiedName!=MSTestNamespace.UnitTest1.TestMethod1 |
Führt alle Tests außer MSTestNamespace.UnitTest1.TestMethod1 aus. |
dotnet test --filter TestCategory=CategoryA |
Führt Tests aus, die mit [TestCategory("CategoryA")] annotiert sind. |
dotnet test --filter Priority=2 |
Führt Tests aus, die mit [Priority(2)] annotiert sind. |
Beispiele für die Verwendung der bedingten Operatoren |
und &
:
Zum Ausführen von Tests, bei denen
UnitTest1
in FullyQualifiedName enthalten oderTestCategoryAttribute"CategoryA"
ist.dotnet test --filter "FullyQualifiedName~UnitTest1|TestCategory=CategoryA"
Zum Ausführen von Tests, bei denen
UnitTest1
in FullyQualifiedName enthalten undTestCategoryAttribute"CategoryA"
ist.dotnet test --filter "FullyQualifiedName~UnitTest1&TestCategory=CategoryA"
Zum Ausführen von Tests, bei denen entweder FullyQualifiedName
UnitTest1
enthält undTestCategoryAttribute"CategoryA"
ist oderPriorityAttribute die Priorität1
hat.dotnet test --filter "(FullyQualifiedName~UnitTest1&TestCategory=CategoryA)|Priority=1"
xUnit-Beispiele
using Xunit;
namespace XUnitNamespace
{
public class TestClass1
{
[Fact, Trait("Priority", "1"), Trait("Category", "CategoryA")]
public void Test1()
{
}
[Fact, Trait("Priority", "2")]
public void Test2()
{
}
}
}
expression | Ergebnis |
---|---|
dotnet test --filter DisplayName=XUnitNamespace.TestClass1.Test1 |
Führt einen Test, XUnitNamespace.TestClass1.Test1 , aus. |
dotnet test --filter FullyQualifiedName!=XUnitNamespace.TestClass1.Test1 |
Führt alle Tests außer XUnitNamespace.TestClass1.Test1 aus. |
dotnet test --filter DisplayName~TestClass1 |
Führt Tests aus, dessen Anzeigename TestClass1 enthält. |
Im Codebeispiel können die definierten Merkmale mit den Schlüsseln "Category"
und "Priority"
zum Filtern verwendet werden.
expression | Ergebnis |
---|---|
dotnet test --filter XUnit |
Führt Tests aus, dessen FullyQualifiedNameXUnit enthält. |
dotnet test --filter Category=CategoryA |
Führt Tests aus, die [Trait("Category", "CategoryA")] enthalten. |
Beispiele für die Verwendung der bedingten Operatoren |
und &
:
Zum Ausführen von Tests, bei denen
TestClass1
ihren FullyQualifiedName enthält oder die über einenTrait
mit dem Schlüssel"Category"
und dem Wert"CategoryA"
verfügen.dotnet test --filter "FullyQualifiedName~TestClass1|Category=CategoryA"
Zum Ausführen von Tests, bei denen
TestClass1
ihren FullyQualifiedName enthält und die über einenTrait
mit dem Schlüssel"Category"
und dem Wert"CategoryA"
verfügen.dotnet test --filter "FullyQualifiedName~TestClass1&Category=CategoryA"
Zum Ausführen von Tests, bei denen entweder FullyQualifiedName
TestClass1
enthält und die über einenTrait
mit dem Schlüssel"Category"
und dem Wert"CategoryA"
verfügen oder die über einenTrait
mit dem Schlüssel"Priority"
und dem Wert1
verfügen.dotnet test --filter "(FullyQualifiedName~TestClass1&Category=CategoryA)|Priority=1"
NUnit-Beispiele
using NUnit.Framework;
namespace NUnitNamespace
{
public class UnitTest1
{
[Test, Property("Priority", 1), Category("CategoryA")]
public void TestMethod1()
{
}
[Test, Property("Priority", 2)]
public void TestMethod2()
{
}
}
}
expression | Ergebnis |
---|---|
dotnet test --filter Method |
Führt Tests aus, dessen FullyQualifiedNameMethod enthält. |
dotnet test --filter Name~TestMethod1 |
Führt Tests aus, dessen Name TestMethod1 enthält. |
dotnet test --filter FullyQualifiedName~NUnitNamespace.UnitTest1 |
Führt Tests aus, die sich in der Klasse NUnitNamespace.UnitTest1 befinden. |
dotnet test --filter FullyQualifiedName!=NUnitNamespace.UnitTest1.TestMethod1 |
Führt alle Tests außer NUnitNamespace.UnitTest1.TestMethod1 aus. |
dotnet test --filter TestCategory=CategoryA |
Führt Tests aus, die mit [Category("CategoryA")] annotiert sind. |
dotnet test --filter Priority=2 |
Führt Tests aus, die mit [Priority(2)] annotiert sind. |
Beispiele für die Verwendung der bedingten Operatoren |
und &
:
Zum Ausführen von Tests, bei denen UnitTest1
in FullyQualifiedName enthalten oderCategory
"CategoryA"
ist.
dotnet test --filter "FullyQualifiedName~UnitTest1|TestCategory=CategoryA"
Zum Ausführen von Tests, bei denen UnitTest1
in FullyQualifiedName enthalten undCategory
"CategoryA"
ist.
dotnet test --filter "FullyQualifiedName~UnitTest1&TestCategory=CategoryA"
Zum Ausführen von Tests, bei denen entweder FullyQualifiedNameUnitTest1
enthält undCategory
"CategoryA"
ist oderProperty
die "Priority"
1
hat.
dotnet test --filter "(FullyQualifiedName~UnitTest1&TestCategory=CategoryA)|Priority=1"
Weitere Informationen finden Sie unter TestCase-Filter.