tunit-filtering
Use for quick TUnit --treenode-filter patterns.
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
القائمة
Use for quick TUnit --treenode-filter patterns.
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
استنادا إلى تصنيف SOC المهني
Use when converting an Aspire AppHost (typically Program.cs/AppHost.cs) into Purview.Aspire.ResourceKit patterns: generate a HostKit, split resources into ResourceKits with BuildResource/ConfigureResource, map existing config into generated options (IsEnabled/Name), replace direct wiring with AddAspireResourceKit, and update tests/fixtures/configuration to use OptionsHelper and ResourceKit semantics.
Use when creating, moving, or splitting projects in a repository that uses Purview.DotNetProjectSdk, especially for src/tests placement, test suffix naming, namespace alignment, and automatic project-reference behavior.
Create and apply a prerelease bump using Changesets CLI, with the new changeset markdown summarizing the actual changes since the last shipped release.
Use when creating or refactoring .NET tests with TUnit conventions (AAA pattern, naming, async assertions, and CancellationToken usage).
Git workflow and conventional commit guidance.
Lefthook Git hook integration.
| name | tunit-filtering |
| description | Use for quick TUnit --treenode-filter patterns. |
Use this skill when you already know you need filtering syntax and want concise examples.
For full execution and troubleshooting guidance, use ../tunit-test-runner/SKILL.md.
--treenode-filter for narrowing tests (do not use --filter).--treenode-filterSelect tests by tree path:
/<Assembly>/<Namespace>/<Class name>/<Test name>
Each segment maps to one level:
Examples:
/*/*/LoginTests/* → all tests in class LoginTests/*/*/*/AcceptCookiesTest → a single test by name/*/MyProject.Tests.Integration/*/* → tests in a namespace* wildcardMatches any value in a segment, or part of a value.
Examples:
/*/*/LoginTests*/*/*/*/MyProject.Tests.Api*/*= equalityMatches an exact property value.
Example:
/*/*/*/*[Category=Unit]!= not equalExcludes a property value.
Example:
[Category!=Slow]& ANDCombines multiple conditions in the same segment or property group.
Examples:
/**[(Category=Unit)&(Priority=High)]/*/*/*/*[(Category=Unit)&(Priority=High)]| ORMatches either condition, inside a single parenthesized group.
Examples:
/*/*/(LoginTests)|(SignupTests)/*/**[(Category=Unit)|(Priority=High)]** match-allMatches any path depth, but it must appear at the end of the path.
Examples:
/**/MyAssembly/**You can filter on custom properties in the last segment using [...].
Examples:
/*/*/*/*[Category=Unit]/*/*/*/*[Owner=*Team-Backend*]/*/*/*/*[Category!=Slow][...] is allowed per path segment.& or |.[Category=Smoke]|[Priority=High] are not valid.** must be at the end; /**/Path is not allowed./*/*/*/*/*/*/*/*[Category=Unit]/*/*/*/*[(Category=Unit)&(Priority=High)]/*/MyProject.Tests.Integration/*/*[Priority=Critical]dotnet test noteTUnit does not use the usual VSTest --filter syntax. Use --treenode-filter instead.
Preferred: dotnet test --treenode-filter "..."
Compatibility form (older SDKs): dotnet test -- --treenode-filter "..."
Use path-like tree-node filters for common flows:
/*/*/*/*/ — all tests/*/*/*/MyFeatureTests/* — class-scoped/*/*/*/*/MyScenario* — name patternIf zero tests run:
--treenode-filter is used (not --filter).dotnet test --treenode-filter "..." first; if needed for your SDK version, use dotnet test -- --treenode-filter "..."./*/*/*/*/), then narrow.[Test] methods.[(A=1)&(B=2)]).../tunit-test-runner/SKILL.md../dotnet-tunit/SKILL.md