filter-syntax について
filter-syntaxは、名前、クラス、名前空間、特性で.NETテストを選ぶ開発者向けのフィルター構文リファレンスです。VSTestとMTPの構文や、両者のフィルター変換方法をまとめています。
主な機能
- 01VSTestフィルター式の解説
- 02フレームワーク別対応プロパティの一覧
- 03MTP固有のフィルターフラグの説明
- 04VSTestからMTPへの対応表
活用シーン
- 01名前による.NETテストの絞り込み
- 02クラスや特性によるテスト選択
- 03xUnit v3のテストフィルターをMTP向けに変換
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ dotnet/ skills --skill filter-syntaxインストール後、Claude Code で/filter-syntaxを入力して読み込まれたか確認します。
詳細
テストフィルター構文リファレンス
フィルター構文は、プラットフォームとテストフレームワークによって異なります。
VSTest フィルター(MSTest、xUnit v2、VSTest 上の NUnit)
dotnet test --filter <EXPRESSION>
式の構文:<Property><Operator><Value>[|&<Expression>]
演算子:
| 演算子 | 意味 |
|---|---|
= | 完全一致 |
!= | 完全一致しない |
~ | 含む |
!~ | 含まない |
結合子: |(OR)、&(AND)。グループ化には括弧を使用します:(A|B)&C
フレームワークごとの対応プロパティ:
| フレームワーク | プロパティ |
|---|---|
| MSTest | FullyQualifiedName、Name、ClassName、Priority、TestCategory |
| xUnit | FullyQualifiedName、DisplayName、Traits |
| NUnit | FullyQualifiedName、Name、Priority、TestCategory |
演算子を含まない式は、FullyQualifiedName~<value> として扱われます。
例(VSTest):
# Run tests whose name contains "LoginTest"
dotnet test --filter "Name~LoginTest"
# Run a specific test class
dotnet test --filter "ClassName=MyNamespace.MyTestClass"
# Run tests in a category
dotnet test --filter "TestCategory=Integration"
# Exclude a category
dotnet test --filter "TestCategory!=Slow"
# Combine: class AND category
dotnet test --filter "ClassName=MyNamespace.MyTestClass&TestCategory=Unit"
# Either of two classes
dotnet test --filter "ClassName=MyNamespace.ClassA|ClassName=MyNamespace.ClassB"
MTP フィルター — MSTest と NUnit
MTP 上の MSTest と NUnit は、VSTest と同じ --filter 構文(同じプロパティ、演算子、結合子)を使用します。異なるのはフラグの渡し方だけです。
# .NET SDK 8/9 (after --)
dotnet test -- --filter "Name~LoginTest"
# .NET SDK 10+ (direct)
dotnet test --filter "Name~LoginTest"
MTP フィルター — xUnit(v3)
MTP 上の xUnit v3 は、汎用的な --filter 式の代わりに、フレームワーク固有のフィルターフラグを使用します。
| フラグ | 説明 |
|---|---|
--filter-class "name" | 指定したクラス内のすべてのテストを実行 |
--filter-not-class "name" | 指定したクラス内のすべてのテストを除外 |
--filter-method "name" | 特定のテストメソッドを実行 |
--filter-not-method "name" | 特定のテストメソッドを除外 |
--filter-namespace "name" | 指定した名前空間内のすべてのテストを実行 |
--filter-not-namespace "name" | 指定した名前空間内のすべてのテストを除外 |
--filter-trait "name=value" | 一致するトレイトを持つテストを実行 |
--filter-not-trait "name=value" | 一致するトレイトを持つテストを除外 |
1 つのフラグに複数の値を指定できます:--filter-class Foo Bar。
# .NET SDK 8/9
dotnet test -- --filter-class "MyNamespace.LoginTests"
# .NET SDK 10+
dotnet test --filter-class "MyNamespace.LoginTests"
# Combine: namespace + trait
dotnet test --filter-namespace "MyApp.Tests.Integration" --filter-trait "Category=Smoke"
xUnit v3 クエリフィルター言語
複雑な式には、パスセグメント構文を使用する --filter-query を使用します。
/<assemblyFilter>/<namespaceFilter>/<classFilter>/<methodFilter>[traitName=traitValue]
各セグメントは、アセンブリ名、名前空間、クラス名、メソッド名に対して照合されます。任意のセグメントで「すべてに一致」させるには * を使用します。ドキュメント:https://xunit.net/docs/query-filter-language
# xUnit.net v3 MTP — using query language (assembly/namespace/class/method[trait])
dotnet test -- --filter-query "/*/*/*IntegrationTests*/*[Category=Smoke]"
MTP フィルター — TUnit
TUnit は、パスベースの構文で --treenode-filter を使用します。
--treenode-filter "/<Assembly>/<Namespace>/<ClassName>/<TestName>"
ワイルドカード(*)は任意のセグメントで使用できます。プロパティベースのフィルタリングでは、フィルター演算子をテスト名に追加できます。
| 演算子 | 意味 |
|---|---|
* | ワイルドカード一致 |
= | プロパティの完全一致(例:[Category=Unit]) |
!= | プロパティ値を除外 |
& | AND(条件を結合) |
| | OR(セグメント内で使用。括弧が必要) |
例(TUnit):
# All tests in a class
dotnet run --treenode-filter "/*/*/LoginTests/*"
# A specific test
dotnet run --treenode-filter "/*/*/*/AcceptCookiesTest"
# By namespace prefix (wildcard)
dotnet run --treenode-filter "/*/MyProject.Tests.Api*/*/*"
# By custom property
dotnet run --treenode-filter "/*/*/*/*[Category=Smoke]"
# Exclude by property
dotnet run --treenode-filter "/*/*/*/*[Category!=Slow]"
# OR across classes
dotnet run --treenode-filter "/*/*/(LoginTests)|(SignupTests)/*"
# Combined: namespace + property
dotnet run --treenode-filter "/*/MyProject.Tests.Integration/*/*/*[Priority=Critical]"
VSTest → MTP フィルターの変換(移行用)
MSTest、NUnit、xUnit.net v2(YTest.MTP.XUnit2 を使用):VSTest の --filter 構文は、VSTest と MTP の両方で同一です。変更は不要です。
xUnit.net v3(ネイティブ MTP):xUnit.net v3 は、MTP 上で VSTest の --filter 構文をサポートしていません。xUnit.net v3 のネイティブオプションを使ってフィルターを変換してください。
VSTest の --filter 構文 | xUnit.net v3 MTP の同等構文 | 備考 |
|---|---|---|
FullyQualifiedName~ClassName | --filter-class *ClassName* | 部分文字列一致にはワイルドカードが必要 |
FullyQualifiedName=Ns.Class.Method | --filter-method Ns.Class.Method | 完全修飾メソッド名での完全一致 |
Name=MethodName | --filter-method *MethodName* | 部分文字列一致にはワイルドカードが必要 |
Category=Value(トレイト) | --filter-trait "Category=Value" | トレイト名と値のペアでフィルタリング |
| 複雑な式 | --filter-query "expr" | xUnit.net クエリフィルター言語を使用(上記参照) |