Dotnet Testing
novotnyllc/dotnet-artisan
Defines .NET test strategy and implementation patterns across xUnit v3 (Facts, Theories, fixtures, IAsyncLifetime), integration testing (WebApplicationFactory, Testcontainers), Aspire testing…
Build, test, and validate changes in the vstest repository. An agent skill from microsoft/vstest.
$ npx skills add microsoft/vstest --skill vstest-build-test -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install microsoft/vstest vstest-build-test --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/microsoft/vstest.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.github/skills/vstest-build-test .claude/skills/vstest-build-test && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "vstest-build-test" agent skill from https://github.com/microsoft/vstest/tree/main/.github/skills/vstest-build-test into .claude/skills/vstest-build-test/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "vstest-build-test", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/microsoft/vstest/tree/main/.github/skills/vstest-build-testType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add microsoft/vstest --skill vstest-build-test -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install microsoft/vstest vstest-build-test --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/microsoft/vstest.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.github/skills/vstest-build-test .agents/skills/vstest-build-test && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "vstest-build-test" agent skill from https://github.com/microsoft/vstest/tree/main/.github/skills/vstest-build-test into .agents/skills/vstest-build-test/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "vstest-build-test", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add microsoft/vstest --skill vstest-build-test -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install microsoft/vstest vstest-build-test --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/microsoft/vstest.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.github/skills/vstest-build-test .cursor/skills/vstest-build-test && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "vstest-build-test" agent skill from https://github.com/microsoft/vstest/tree/main/.github/skills/vstest-build-test into .cursor/skills/vstest-build-test/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "vstest-build-test", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/microsoft/vstest.git --path .github/skills/vstest-build-test--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add microsoft/vstest --skill vstest-build-test -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install microsoft/vstest vstest-build-test --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/microsoft/vstest.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.github/skills/vstest-build-test .gemini/skills/vstest-build-test && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "vstest-build-test" agent skill from https://github.com/microsoft/vstest/tree/main/.github/skills/vstest-build-test into .gemini/skills/vstest-build-test/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "vstest-build-test", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install microsoft/vstest vstest-build-testInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add microsoft/vstest --skill vstest-build-test -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/microsoft/vstest.git skills-src && mkdir -p .github/skills && cp -r skills-src/.github/skills/vstest-build-test .github/skills/vstest-build-test && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "vstest-build-test" agent skill from https://github.com/microsoft/vstest/tree/main/.github/skills/vstest-build-test into .github/skills/vstest-build-test/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "vstest-build-test", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add microsoft/vstest --skill vstest-build-test -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install microsoft/vstest vstest-build-test --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/microsoft/vstest.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.github/skills/vstest-build-test .opencode/skills/vstest-build-test && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "vstest-build-test" agent skill from https://github.com/microsoft/vstest/tree/main/.github/skills/vstest-build-test into .opencode/skills/vstest-build-test/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "vstest-build-test", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
vstest-build-testBuild, test, and validate changes in the vstest repository. An agent skill from microsoft/vstest.
Vstest Build Test is an agent skill from microsoft/vstest, published by the product's own GitHub organization. Build, test, and validate changes in the vstest repository. Use when building vstest projects, running unit tests, smoke tests, or acceptance tests, or when deploying locally built vstest.console for manual testing.
Its SKILL.md is about 1.9k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Testing & QA, covering QA and bug reports, Unit testing and End-to-end testing. It works with .NET. The repository describes itself as: Visual Studio Test Platform is the runner and engine that powers test explorer and vstest.console. The licence is MIT.
3 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 05cd781. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
dotnetFrom the folder's file list and the shell code blocks in SKILL.md.
Links to these hosts (documentation or services it may open):
microsoft.comFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Vstest Build Test loads about 1.9k tokens when it runs. Until then it costs about 58 tokens; SKILL.md has 579 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from microsoft/vstest at commit 05cd781, republished under its MIT licence (© microsoft). 579 words, ~1,906 tokens.
.claude/skills/vstest-build-test/SKILL.md (or your agent's skills folder).Before building, verify the .dotnet toolchain matches the current OS. The repo bootstraps its own .NET SDK into .dotnet/.
Run this check before every first build in a session:
# Determine current OS
OS=$(uname -s) # "Linux", "Darwin" (macOS), or contains "MINGW"/"MSYS" (Windows/Git Bash)
if [ -d ".dotnet" ]; then
if [ "$OS" = "Linux" ] || [ "$OS" = "Darwin" ]; then
# On Linux/macOS the dotnet binary must be an ELF/Mach-O executable, not .exe
if [ -f ".dotnet/dotnet.exe" ] && [ ! -f ".dotnet/dotnet" ]; then
echo "MISMATCH: .dotnet contains Windows binaries but OS is $OS"
rm -rf .dotnet .packages artifacts
echo "Cleaned .dotnet, .packages, and artifacts for fresh bootstrap"
fi
else
# On Windows the dotnet binary should be dotnet.exe
if [ -f ".dotnet/dotnet" ] && [ ! -f ".dotnet/dotnet.exe" ]; then
echo "MISMATCH: .dotnet contains Linux/macOS binaries but OS is Windows"
rm -rf .dotnet .packages artifacts
echo "Cleaned .dotnet, .packages, and artifacts for fresh bootstrap"
fi
fi
fiAfter cleanup (or if .dotnet doesn't exist), the build script automatically downloads the correct SDK version from global.json.
| Action | Windows | Linux / macOS |
|---|---|---|
| Restore + Build | ./build.cmd | ./build.sh |
| Restore only | ./restore.cmd | ./restore.sh |
| Build + Pack | ./build.cmd -pack | ./build.sh --pack |
| Release config | ./build.cmd -c Release -pack | ./build.sh -c Release --pack |
| Single project | ./build.cmd -project <csproj> | ./build.sh --projects <csproj> |
For projects with many cross-project dependencies (e.g., HtmlLogger, TrxLogger, vstest.console):
# Linux / macOS
./build.sh --pack
# Windows
./build.cmd -packThis produces NuGet packages under artifacts/packages/Debug/Shipping/.
For isolated projects with few dependencies:
# Linux / macOS
./build.sh --projects <path-to-csproj>
# Windows
./build.cmd -project <path-to-csproj>Warning: This does NOT work for projects like HtmlLogger that have many transitive dependencies. Use
--pack/-packinstead.
# Linux / macOS
./test.sh
# Windows
./test.cmd-projects / --projects takes a resolvable path or glob — it is passed through
Resolve-Path, so a bare project nickname or category (e.g. smoke, htmllogger) fails with
Cannot find path. Point it at the csproj(s):
# Windows
./test.cmd -projects "test\**\*HtmlLogger*\*.csproj"
# Linux / macOS
./test.sh --projects "test/**/*HtmlLogger*/*.csproj"For a single project you can also build+test its csproj directly with the bootstrapped SDK:
# Windows
./.dotnet/dotnet.exe test test/Microsoft.TestPlatform.Extensions.HtmlLogger.UnitTests/*.csproj -c Debug
# Linux / macOS
./.dotnet/dotnet test test/Microsoft.TestPlatform.Extensions.HtmlLogger.UnitTests/*.csproj -c DebugThese are switches handled by eng/build.ps1 — NOT -projects values:
# Windows
./test.cmd -smokeTest # TestCategory=Smoke (a subset of integration tests)
./test.cmd -integrationTest # full acceptance / integration suite
./test.cmd -performanceTest
./test.cmd -compatibilityTest
# Linux / macOS: only --integrationTest and --performanceTest exist, because test.sh
# calls arcade's eng/common/build.sh directly and never goes through eng/build.ps1.
./test.sh --integrationTest # includes smoke; there is no -smokeTest switch here
-smokeTestand-integrationTestare mutually exclusive (smoke is a subset); passing both throws.
On Windows use the -filter parameter. Do not pass --filter inside TestRunnerAdditionalArguments —
eng/build.ps1 explicitly throws if you do.
On Linux/macOS test.sh has no -filter parameter, so the filter goes in as an MSBuild property.
The single quotes are required, otherwise bash interprets &, |, and the inner quotes.
# Windows
./test.cmd -integrationTest -filter "FullyQualifiedName~MyScenario"
# Linux / macOS
./test.sh --integrationTest --property:'TestRunnerAdditionalArguments=--filter "FullyQualifiedName~MyScenario"'See CONTRIBUTING.md for more filtering examples.
Test executables are built against the repo's preview TFM (e.g. net11.0), and integration and
smoke tests additionally launch test-asset apphosts built the same way. An apphost resolves its
shared runtime from DOTNET_ROOT, falling back to the machine-wide install
(C:\Program Files\dotnet), which usually lacks the preview runtime — so it fails instantly with
"You must install or update .NET to run this application." This hits plain unit test runs too,
not only integration and smoke tests.
test.sh (Linux/macOS) sets DOTNET_ROOT to the repo .dotnet automatically.test.cmd (Windows) does not — set it yourself before running:$env:DOTNET_ROOT = "$PWD\.dotnet"
${env:DOTNET_ROOT(x86)} = "$PWD\.dotnet\dotnet-sdk-x86" # only if x86 test hosts run
$env:DOTNET_MULTILEVEL_LOOKUP = "0"
./test.cmd -smokeTestAfter building with --pack / -pack, validate vstest.console changes by unzipping the built package:
artifacts/packages/Debug/Shipping/Microsoft.TestPlatform.<version>-dev.nupkg.nupkg files are ZIP archives)artifacts/<Configuration>/netcoreapp1.0/vstest.console.dllartifacts/<Configuration>/net46/win7-x64/vstest.console.exe| Category | Speed | What it tests | How to run |
|---|---|---|---|
| Unit tests | Fast | Individual units | ./test.cmd / ./test.sh (default) |
| Smoke tests | Slow | P0 end-to-end scenarios | -smokeTest switch |
| Acceptance / integration | Slowest | Extensive coverage | -integrationTest switch |
Toolset version <version> has not been restored.: test.cmd / test.sh do not restore. Build once (./build.cmd -c Release) first, or pass -restore -build to the test command.test.cmd does not set DOTNET_ROOT, so the preview-TFM apphosts look in C:\Program Files\dotnet (which lacks the preview runtime). Set $env:DOTNET_ROOT = "$PWD\.dotnet" before running — see "Running tests locally".docs/diagnose.mdDebugger.Launch at process entry points (testhost.exe, vstest.console.exe)© microsoft, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .github/skills/vstest-build-test of microsoft/vstest.
Open the folder on GitHubat commit 05cd781
Vstest Build Test next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Vstest Build Test this skillmicrosoft/vstest | 969 | — | ~1.9k | Automated safety check: Pass | MIT | |
| Dotnet Testingnovotnyllc/dotnet-artisan | 233 | — | ~972 | Automated safety check: Pass | MIT | |
| Dotnet Testingmacalbert/envilder | 138 | — | ~1.6k | Automated safety check: Pass | MIT | |
| Claude Code QAPramodDutta/qaskills | 232 | — | ~2.3k | Automated safety check: Pass | MIT | |
| Specx Testsmaksimzayats/specx | 202 | — | ~1.9k | Automated safety check: Pass | MIT | |
| Testing QAaiskillstore/marketplace | 430 | 3 repos | ~1.2k | Automated safety check: Pass | None |
novotnyllc/dotnet-artisan
Defines .NET test strategy and implementation patterns across xUnit v3 (Facts, Theories, fixtures, IAsyncLifetime), integration testing (WebApplicationFactory, Testcontainers), Aspire testing…
macalbert/envilder
Mandatory testing conventions for .NET (xUnit, AwesomeAssertions).
PramodDutta/qaskills
The complete QA skill for Claude Code — turn Claude into an expert QA engineer that picks the right test type, writes reliable Playwright, Cypress, and pytest tests, eliminates flaky tests, enforces…
maksimzayats/specx
Add or refine tests for specx Python services. An agent skill from maksimzayats/specx.
aiskillstore/marketplace
Comprehensive testing and QA workflow covering unit testing, integration testing, E2E testing, browser automation, and quality assurance.
steipete/CodexBar
Runs live QA for the CodexBar app: provider usage matrix checks through its packaged CLI, config validation and menu checks, with 1Password-backed credentials handled safely.
microsoft/vstest
Parse and analyze Visual Studio TRX test result files. An agent skill from microsoft/vstest.
microsoft/vstest
Validate that commands documented in skill files actually work.
microsoft/vstest
Create custom agent capabilities when discovering novel tools, receiving task-agnostic tips from reviewers, or after researching specialized workflows not covered in existing instructions.
microsoft/vstest
Route code and dependency changes to relevant review dimensions based on affected files and folders.
Works with
Categories
Build, test, and validate changes in the vstest repository. An agent skill from microsoft/vstest. Vstest Build Test is an agent skill from microsoft/vstest, published by the product's own GitHub organization. Build, test, and validate changes in the vstest repository.
Vstest Build Test fits situations like: building vstest projects; running unit tests; acceptance tests; deploying locally built vstest.console for manual testing.
Run `npx skills add microsoft/vstest --skill vstest-build-test -a claude-code`. Or copy the skill folder (.github/skills/vstest-build-test in microsoft/vstest) into .claude/skills/vstest-build-test in your project. Claude Code loads it when a task matches its description.
Run `npx skills add microsoft/vstest --skill vstest-build-test -a codex`. Or copy the skill folder (.github/skills/vstest-build-test in microsoft/vstest) into .agents/skills/vstest-build-test in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add microsoft/vstest --skill vstest-build-test -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/vstest-build-test, .gemini/skills/vstest-build-test, .github/skills/vstest-build-test and .opencode/skills/vstest-build-test in your project.
Going by SKILL.md and its folder, Vstest Build Test needs the command-line tools its instructions call (dotnet).
SKILL.md names 1 domain. As links in the text: microsoft.com. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Vstest Build Test is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 1.9k tokens (SKILL.md is roughly 7.6k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Vstest Build Test: Dotnet Testing (novotnyllc/dotnet-artisan, 233 stars), Dotnet Testing (macalbert/envilder, 138 stars), Claude Code QA (PramodDutta/qaskills, 232 stars) and Specx Tests (maksimzayats/specx, 202 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
microsoft (a GitHub organization, an official publisher) maintains it in microsoft/vstest, which has 969 GitHub stars. The repository holds 5 skills in this directory. The repository was last updated on October 7, 2026.
Source: microsoft/vstest on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.