К основному содержанию
скилл CX Codex

filter-syntax — скилл для Claude Code: что делает и как установить

Справочный скилл по синтаксису фильтров тестов в .NET для VSTest и MTP. Помогает агенту строить и переводить фильтры для MSTest, NUnit, xUnit v3 и TUnit.

Установить в Claude Code · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add dotnet/skills --skill filter-syntax -a claude-code
Открыть на GitHub

Что делает filter-syntax

Скилл содержит правила фильтрации тестов для платформ VSTest и Microsoft Testing Platform (MTP). Внутри собраны таблицы операторов, комбинаторов и свойств для MSTest, NUnit, xUnit и TUnit, а также правила трансляции выражений при переходе с VSTest на MTP.

Для VSTest и классических движков описан формат аргумента --filter с проверками по имени, классу или категории. Для xUnit v3 на MTP скилл подсказывает отдельные флаги вроде --filter-class и синтаксис --filter-query, а для TUnit задаёт формат пути --treenode-filter с подстановочными знаками.

В манифесте скилла задан параметр user-invocable: false, поэтому напрямую пользователю вызывать его не требуется. Агент подгружает этот справочник автоматически через другие скиллы вроде run-tests или mtp-hot-reload, когда нужно отобрать тесты или переписать команду запуска.

Какие задачи решает

  • составить выражение --filter для MSTest или NUnit в dotnet test
  • перевести синтаксис VSTest в параметры --filter-class и --filter-trait для xUnit v3
  • сформировать путь --treenode-filter с масками для запуска тестов в TUnit
  • построить сложный запрос --filter-query для xUnit.net на MTP

Примеры запросов агенту

  • Запусти только интеграционные тесты из класса LoginTests через dotnet test
  • Переведи фильтр VSTest FullyQualifiedName~OrderTests в параметры для xUnit v3 на MTP
  • Сформируй команду запуска тестов TUnit с фильтром по категории Smoke

Как установить filter-syntax

1Через Skills CLI (Vercel)

npx skills add dotnet/skills --skill filter-syntax -a claude-code

2Вручную: положить файлы

~/.claude/skills/filter-syntax/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/filter-syntax/

По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов

Вопросы о filter-syntax

Как установить filter-syntax в Claude Code?

Выполните в терминале команду npx skills add dotnet/skills --skill filter-syntax -a claude-code. Файл скилла будет сохранён в ~/.claude/skills/filter-syntax/SKILL.md.

Что делает скилл filter-syntax?

Он служит справочником синтаксиса отбора тестов в .NET. Ассистент сверяется с ним, чтобы корректно передавать флаги фильтрации в MSTest, NUnit, xUnit v3 и TUnit.

Можно ли вызывать этот скилл напрямую?

Нет, в его метаданных выставлены user-invocable: false и disable-model-invocation: true. Скилл подключается вспомогательными инструментами run-tests и mtp-hot-reload, когда среда уже определена.

Исходный текст

SKILL.md · MIT
---
name: filter-syntax
description: "Reference-only filter syntax for VSTest and MTP with MSTest, NUnit, xUnit v3, and TUnit. Load only after the platform/framework is known and a consumer needs to create or translate a filter. Do not load for unfiltered runs or platform detection. Used by run-tests and mtp-hot-reload; never invoke directly."
user-invocable: false
disable-model-invocation: true
license: MIT
---

# Test Filter Syntax Reference

Filter syntax depends on the **platform** and **test framework**.

## VSTest filters (MSTest, xUnit v2, NUnit on VSTest)

```bash
dotnet test --filter <EXPRESSION>
```

Expression syntax: `<Property><Operator><Value>[|&<Expression>]`

**Operators:**

| Operator | Meaning |
|----------|---------|
| `=` | Exact match |
| `!=` | Not exact match |
| `~` | Contains |
| `!~` | Does not contain |

**Combinators:** `|` (OR), `&` (AND). Parentheses for grouping: `(A|B)&C`

**Supported properties by framework:**

| Framework | Properties |
|-----------|-----------|
| MSTest | `FullyQualifiedName`, `Name`, `ClassName`, `Priority`, `TestCategory` |
| xUnit | `FullyQualifiedName`, `DisplayName`, `Traits` |
| NUnit | `FullyQualifiedName`, `Name`, `Priority`, `TestCategory` |

An expression without an operator is treated as `FullyQualifiedName~<value>`.

**Examples (VSTest):**

```bash
# 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 filters — MSTest and NUnit

MSTest and NUnit on MTP use the **same `--filter` syntax** as VSTest (same properties, operators, and combinators). The only difference is how the flag is passed:

```bash
# .NET SDK 8/9 (after --)
dotnet test -- --filter "Name~LoginTest"

# .NET SDK 10+ (direct)
dotnet test --filter "Name~LoginTest"
```

## MTP filters — xUnit (v3)

xUnit v3 on MTP uses **framework-specific filter flags** instead of the generic `--filter` expression:

| Flag | Description |
|------|-------------|
| `--filter-class "name"` | Run all tests in a given class |
| `--filter-not-class "name"` | Exclude all tests in a given class |
| `--filter-method "name"` | Run a specific test method |
| `--filter-not-method "name"` | Exclude a specific test method |
| `--filter-namespace "name"` | Run all tests in a namespace |
| `--filter-not-namespace "name"` | Exclude all tests in a namespace |
| `--filter-trait "name=value"` | Run tests with a matching trait |
| `--filter-not-trait "name=value"` | Exclude tests with a matching trait |

Multiple values can be specified with a single flag: `--filter-class Foo Bar`.

```bash
# .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 query filter language

For complex expressions, use `--filter-query` with a path-segment syntax:

```text
/<assemblyFilter>/<namespaceFilter>/<classFilter>/<methodFilter>[traitName=traitValue]
```

Each segment matches against: assembly name, namespace, class name, method name. Use `*` for "match all" in any segment. Documentation: <https://xunit.net/docs/query-filter-language>

```shell
# xUnit.net v3 MTP — using query language (assembly/namespace/class/method[trait])
dotnet test -- --filter-query "/*/*/*IntegrationTests*/*[Category=Smoke]"
```

## MTP filters — TUnit

TUnit uses `--treenode-filter` with a path-based syntax:

```text
--treenode-filter "/<Assembly>/<Namespace>/<ClassName>/<TestName>"
```

Wildcards (`*`) are supported in any segment. Filter operators can be appended to test names for property-based filtering.

| Operator | Meaning |
|----------|---------|
| `*` | Wildcard match |
| `=` | Exact property match (e.g., `[Category=Unit]`) |
| `!=` | Exclude property value |
| `&` | AND (combine conditions) |
| `\|` | OR (within a segment, requires parentheses) |

**Examples (TUnit):**

```bash
# 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 filter translation (for migration)

**MSTest, NUnit, and xUnit.net v2 (with `YTest.MTP.XUnit2`)**: The VSTest `--filter` syntax is identical on both VSTest and MTP. No changes needed.

**xUnit.net v3 (native MTP)**: xUnit.net v3 does NOT support the VSTest `--filter` syntax on MTP. Translate filters using xUnit.net v3's native options:

| VSTest `--filter` syntax | xUnit.net v3 MTP equivalent | Notes |
|---|---|---|
| `FullyQualifiedName~ClassName` | `--filter-class *ClassName*` | Wildcards required for substring match |
| `FullyQualifiedName=Ns.Class.Method` | `--filter-method Ns.Class.Method` | Exact match on fully qualified method |
| `Name=MethodName` | `--filter-method *MethodName*` | Wildcards for substring match |
| `Category=Value` (trait) | `--filter-trait "Category=Value"` | Filter by trait name/value pair |
| Complex expressions | `--filter-query "expr"` | Uses xUnit.net query filter language (see above) |

© dotnet · MIT · dotnet/skills

Похожие скиллы

Всё по теме «Тесты и QA» →
improve-codebase-architecture Matt Pocock Скилл ищет архитектурные узкие места в кодовой базе и показывает варианты углубления модулей в HTML-отчёте. Подойдёт для ревью перед рефакторингом. 1 163 035установок design-taste-frontend Leonxlnx Скилл задаёт арт-дирекцию для публичных страниц и рабочих экранов, а затем проверяет результат в браузере по скриншотам. Нужен, когда интерфейс выглядит шаблонным или недоработанным. CX Codex +1 678 700установок tdd Matt Pocock Скилл управляет циклом красный-зелёный в TDD: проверяет, что тесты пишутся до кода, держит их на уровне публичных интерфейсов и не завязывает на внутреннюю структуру. 1 141 062установок skill-creator официальный anthropics Помогает создать новый скилл, доработать существующий и проверить результат через тестовые промпты и оценки. 414 180установок agent-browser vercel-labs Скилл управляет браузером через CLI: открывает страницы, заполняет формы, нажимает кнопки и проверяет веб-приложения. Подходит для задач, где агенту нужно действовать в интерфейсе. CX Codex +1 1 200 000установок prototype Matt Pocock Создаёт временный прототип, чтобы проверить логику, модель состояния или вид интерфейса до работы над основным кодом. 986 201установок

Из того же набора101

optimizing-ef-core-queries Разбирает доступ к данным на EF Core в сервисах, репозиториях и фоновых заданиях и показывает, где запросы тормозят, дублируют строки или бьют по базе лишний раз. CX Codex +1 5 700установок run-tests Подбирает и запускает правильную команду dotnet test под проект: классический раннер, VSTest, bridged MTP или native MTP. Пригодится, когда фильтры и флаги в .NET-тестах не сходятся. CX Codex +1 5 600установок analyzing-dotnet-performance Ищет около 50 антипаттернов производительности в коде на C# и .NET — от лишних аллокаций в строках до блокировок в async. Пригодится при аудите горячих путей перед релизом. CX Codex +1 4 900установок test-anti-patterns Анализирует тесты на антипаттерны: пустые проверки, перехватанные исключения, зависимость от порядка, магические значения. Работает с любым языком — выдаёт отчёт с ранжированием по серьёзности. CX Codex +1 4 400установок dotnet-webapi Скилл для ИИ-кодинга ведёт агента при добавлении эндпоинтов ASP.NET Core Web API: HTTP-статусы, метаданные OpenAPI, обработка ошибок. CX Codex +1 4 300установок msbuild-antipatterns Находит антипаттерны в проектах MSBuild и проверяет таргеты на ошибки. Пригодится для ревизии файлов .csproj и .fsproj без автоматической правки кода. CX Codex +1 3 900установок code-testing-agent Совместимый псевдоним для скилла code-testing: он перенаправляет старые явные вызовы к актуальному сценарию тестирования кода. CX Codex +1 4 000установок csharp-scripts Запускает C#-код из одного файла через dotnet, без создания проекта. Пригодится для проверки языковой фичи или мелкой утилиты. CX Codex +1 3 800установок

Спонсоры проекта

Компании, которые помогают держать аналитику открытой