ScottPlot Test Runner
ScottPlot/ScottPlot
Run or add ScottPlot 5 tests. Use for unit-test and cookbook-test work; unless explicitly asked otherwise, restrict manual test execution to the Unit Tests…
Convert .NET tests from xUnit.net v2/v3 to MSTest v4 while preserving VSTest or MTP.
$ npx skills add dotnet/skills --skill migrate-xunit-to-mstest -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install dotnet/skills migrate-xunit-to-mstest --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/dotnet/skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/plugins/dotnet-test-migration/skills/migrate-xunit-to-mstest .claude/skills/migrate-xunit-to-mstest && 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 "migrate-xunit-to-mstest" agent skill from https://github.com/dotnet/skills/tree/main/plugins/dotnet-test-migration/skills/migrate-xunit-to-mstest into .claude/skills/migrate-xunit-to-mstest/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "migrate-xunit-to-mstest", 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/dotnet/skills/tree/main/plugins/dotnet-test-migration/skills/migrate-xunit-to-mstestType 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 dotnet/skills --skill migrate-xunit-to-mstest -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install dotnet/skills migrate-xunit-to-mstest --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/dotnet/skills.git skills-src && mkdir -p .agents/skills && cp -r skills-src/plugins/dotnet-test-migration/skills/migrate-xunit-to-mstest .agents/skills/migrate-xunit-to-mstest && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "migrate-xunit-to-mstest" agent skill from https://github.com/dotnet/skills/tree/main/plugins/dotnet-test-migration/skills/migrate-xunit-to-mstest into .agents/skills/migrate-xunit-to-mstest/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "migrate-xunit-to-mstest", 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 dotnet/skills --skill migrate-xunit-to-mstest -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install dotnet/skills migrate-xunit-to-mstest --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/dotnet/skills.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/plugins/dotnet-test-migration/skills/migrate-xunit-to-mstest .cursor/skills/migrate-xunit-to-mstest && 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 "migrate-xunit-to-mstest" agent skill from https://github.com/dotnet/skills/tree/main/plugins/dotnet-test-migration/skills/migrate-xunit-to-mstest into .cursor/skills/migrate-xunit-to-mstest/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "migrate-xunit-to-mstest", 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/dotnet/skills.git --path plugins/dotnet-test-migration/skills/migrate-xunit-to-mstest--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 dotnet/skills --skill migrate-xunit-to-mstest -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install dotnet/skills migrate-xunit-to-mstest --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/dotnet/skills.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/plugins/dotnet-test-migration/skills/migrate-xunit-to-mstest .gemini/skills/migrate-xunit-to-mstest && 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 "migrate-xunit-to-mstest" agent skill from https://github.com/dotnet/skills/tree/main/plugins/dotnet-test-migration/skills/migrate-xunit-to-mstest into .gemini/skills/migrate-xunit-to-mstest/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "migrate-xunit-to-mstest", 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 dotnet/skills migrate-xunit-to-mstestInstalls 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 dotnet/skills --skill migrate-xunit-to-mstest -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/dotnet/skills.git skills-src && mkdir -p .github/skills && cp -r skills-src/plugins/dotnet-test-migration/skills/migrate-xunit-to-mstest .github/skills/migrate-xunit-to-mstest && 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 "migrate-xunit-to-mstest" agent skill from https://github.com/dotnet/skills/tree/main/plugins/dotnet-test-migration/skills/migrate-xunit-to-mstest into .github/skills/migrate-xunit-to-mstest/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "migrate-xunit-to-mstest", 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 dotnet/skills --skill migrate-xunit-to-mstest -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install dotnet/skills migrate-xunit-to-mstest --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/dotnet/skills.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/plugins/dotnet-test-migration/skills/migrate-xunit-to-mstest .opencode/skills/migrate-xunit-to-mstest && 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 "migrate-xunit-to-mstest" agent skill from https://github.com/dotnet/skills/tree/main/plugins/dotnet-test-migration/skills/migrate-xunit-to-mstest into .opencode/skills/migrate-xunit-to-mstest/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "migrate-xunit-to-mstest", 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.
migrate-xunit-to-mstestConvert .NET tests from xUnit.net v2/v3 to MSTest v4 while preserving VSTest or MTP.
Migrate Xunit To Mstest is an agent skill from dotnet/skills, published by the product's own GitHub organization. Convert .NET tests from xUnit.net v2/v3 to MSTest v4 while preserving VSTest or MTP. Use for replacing xunit packages, Fact/Theory/InlineData/MemberData, assertions, IClassFixture/ICollectionFixture, ITestOutputHelper, TestContext cancellation, traits/Owner, skips, timeouts, and xUnit parallelization. Also use when a "convert xUnit to MSTest" request may already be migrated: inspect and report the no-op. Do not use for xUnit v2-to-v3, MSTest upgrades, NUnit/TUnit conversion, or runner-only VSTest-to-MTP migration.
Its SKILL.md is about 3.9k tokens, which your agent loads only when the skill is triggered. The skill folder holds 2 other files, including reference files (for example `references/mapping-cheatsheet.md`).
It sits in Testing & QA, covering Unit testing. It works with .NET. The repository describes itself as: Repository for skills to assist AI coding agents with .NET and C. The licence is MIT.
6 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 1d40f95. 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.
No URLs in SKILL.md.
From 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.
Migrate Xunit To Mstest loads about 3.9k tokens when it runs, and up to ~11k if it reads all its reference files. Until then it costs about 136 tokens; SKILL.md has 1,818 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 dotnet/skills at commit 1d40f95, republished under its MIT licence (© dotnet). 1,818 words, ~3,871 tokens.
.claude/skills/migrate-xunit-to-mstest/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.Convert xUnit.net v2 or v3 tests to MSTest v4 without changing the target framework or test platform. A successful migration builds, discovers the same tests, and preserves pass/fail results and execution semantics.
Use this skill only when the project contains xUnit packages or source and the user wants MSTest. If the project already uses MSTest and contains no xUnit tests, report that no framework migration is needed and make no changes.
Do not combine this framework conversion with a target-framework upgrade or VSTest/MTP migration. Complete and verify one migration before starting another.
Apply these before the mechanical mapping:
| Detected state | Required action |
|---|---|
| No xUnit package, namespace, attribute, or fixture remains | Stop. Make no file changes, report that migration is unnecessary, and run the existing dotnet test command once to prove the already-MSTest project is healthy. |
| Source uses VSTest | Keep the existing VSTest property/configuration. Prefer retaining and updating a source project's explicit Microsoft.NET.Test.Sdk pin; a repository that intentionally relies on the MSTest metapackage's transitive dependency may keep that convention. Do not introduce MTP properties. |
| Source uses MTP | Replace xUnit-specific MTP selection with MSTest MTP configuration. Prefer MSTest.Sdk; with the metapackage, set EnableMSTestRunner=true and OutputType=Exe. Preserve native-versus-bridged command integration, and do not add <UseVSTest>true</UseVSTest> or other VSTest-only configuration. |
| Source relies on xUnit's default parallelization | Add [assembly: Parallelize(Workers = 0, Scope = ExecutionScope.ClassLevel)] to a compiled .cs file when the current project has at least two independently runnable test classes. In a one-class project with no explicit parallel setting, omit it because class-level concurrency is not observable. Translate explicit CollectionBehavior or xunit.runner.json settings regardless of current class count. Before reporting completion, read the changed file back and name it in the result. |
For detailed mappings and examples, search references/mapping-cheatsheet.md for constructs actually present in the project and read only the matching sections. Do not load or reproduce the whole reference.
For a routine project migration, converge in four phases: one batched discovery read/search, one edit pass, one dotnet test, and one concise result. Do not:
references/ directory; those files are read-only guidance, not an editing workspacedotnet test --no-restore unless restore is already known to be currentdotnet test is sufficientUse an existing CI/test result as the parity baseline when available. Run a new pre-edit baseline only when counts are unavailable and the migration contains data-driven tests, fixtures, skips, custom extensions, shared state, or other behavior whose parity cannot be established from source alone.
Directory.Build.props, Directory.Packages.props, global.json, and runner configuration, and search the source for the high-risk constructs below.xunit 2.x and related packages -> xUnit v2xunit.v3 or xunit.v3.* -> xUnit v3platform-detection only when the platform is ambiguous, and preserve the detected platform.IClassFixture, ICollectionFixture, CollectionDefinition, custom FactAttribute/TheoryAttribute/DataAttributeAssert.Throws, ThrowsAny, IsType, Record.Exception, event assertionsITestOutputHelper, TestContext.Current, IAsyncLifetimeCollectionBehavior, xunit.runner.json, shared static or external stateRemove xUnit packages from project files and central package files. This includes xunit*, xunit.v3.*, xunit.runner.visualstudio, YTest.MTP.XUnit2, and xUnit-specific companion packages that are being replaced.
Default to the MSTest v4 metapackage for an incremental conversion:
<!-- Example pin: replace with the exact stable v4 version resolved from the configured package source. -->
<PackageReference Include="MSTest" Version="4.1.0" />The metapackage includes Microsoft.NET.Test.Sdk, MSTest.TestAdapter, MSTest.TestFramework, and MSTest.Analyzers. When preserving VSTest, prefer retaining a source project's explicit Microsoft.NET.Test.Sdk pin and update it to a version compatible with the chosen MSTest version; this keeps runner/version compatibility reviewable. A repository that intentionally relies on the metapackage's transitive dependency may preserve that convention instead. For the example pin above, MSTest 4.1.0 requires Microsoft.NET.Test.Sdk 18.0.1+; incompatible older pins can cause NU1605.
When preserving MTP, do not carry xUnit's UseMicrosoftTestingPlatformRunner property into the MSTest project. Prefer MSTest.Sdk at the resolved version. If repository conventions require the metapackage route, set <EnableMSTestRunner>true</EnableMSTestRunner> and <OutputType>Exe</OutputType>. Retain TestingPlatformDotnetTestSupport=true only for repositories that continue to invoke MTP applications through VSTest command mode; native .NET 10+ MTP mode does not require it. When preserving VSTest with MSTest.Sdk, set <UseVSTest>true</UseVSTest>.
Do not change TargetFramework. Remove xunit.runner.json only after porting its relevant settings.
Apply the common rewrites first:
| xUnit | MSTest |
|---|---|
| no class attribute | [TestClass] |
[Fact] | [TestMethod] |
[Theory] + [InlineData] | [TestMethod] + [DataRow] |
[MemberData] | [DynamicData] |
[Fact(Skip = "...")] | [TestMethod] + [Ignore("...")] |
[Trait("Category", value)] | [TestCategory(value)] |
[Trait("Owner", value)] | [Owner(value)] |
other [Trait(key, value)] | [TestProperty(key, value)] |
Assert.Equal / NotEqual | Assert.AreEqual / AreNotEqual |
Assert.True / False | Assert.IsTrue / IsFalse |
Assert.Null / NotNull | Assert.IsNull / IsNotNull |
Remove using Xunit; and using Xunit.Abstractions;. Add using Microsoft.VisualStudio.TestTools.UnitTesting; for the metapackage option; MSTest.Sdk supplies it as an implicit global using.
Preserve existing class inheritance. Do not mechanically seal classes.
Load the mapping cheatsheet for every high-risk construct found in Step 1. These rules are mandatory:
Assert.Throws<T> is exact-type and maps to MSTest Assert.ThrowsExactly<T>.Assert.ThrowsAny<T> permits derived types and maps to MSTest Assert.Throws<T>.Assert.IsType<T> is exact-type and maps to the generic Assert.IsExactInstanceOfType<T>; Assert.IsAssignableFrom<T> maps to the generic Assert.IsInstanceOfType<T>. When the xUnit assertion's typed return value is assigned, preserve that assignment and use the generic MSTest overload rather than a non-generic Type overload.Assert.Equal on sequences compares elements. Use Assert.AreSequenceEqual on MSTest 4.3+ or CollectionAssert.AreEqual with materialized lists on earlier v4; never replace sequence equality with reference-based Assert.AreEqual.[Ignore] and [Timeout] are modifiers; keep [TestMethod] so the test is discovered.[DataRow] values must exactly match parameter types.TestContext.Current.CancellationToken maps to an injected MSTest TestContext.CancellationToken; never replace it with CancellationToken.None or a new CancellationTokenSource.Owner is a reserved VSTest property. Map [Trait("Owner", value)] to [Owner(value)], not [TestProperty("Owner", value)].Assert.Collection, Assert.All, Assert.Equivalent, Record.Exception, event assertions) require an explicit manual rewrite. Never delete an assertion without replacing its verification.Apply the mechanical and semantic rewrites in one edit pass when the inventory makes the required mappings clear. Do not run an intermediate build by default; use compiler errors from final verification to drive only unresolved conversions.
IDisposable/IAsyncDisposable when valid. Map IAsyncLifetime to [TestInitialize]/[TestCleanup].IClassFixture<T> means one fixture instance per test class, shared by all methods in that class. Map it to a static T field created once by a static [ClassInitialize] method that accepts TestContext, and dispose it once from static [ClassCleanup]. Never use [TestInitialize]/[TestCleanup] for this mapping because that creates one fixture per test method.ICollectionFixture<T>, preserve both sharing and serialization. Prefer a static Lazy<T> helper used by each member class; add [DoNotParallelize] only when the source collection disabled parallelization. Use assembly initialization only when the fixture is genuinely assembly-wide.ITestOutputHelper with constructor-injected or property-based MSTest TestContext, and replace each _output.WriteLine(...) call with the corresponding TestContext.WriteLine(...). In the final result, name both the TestContext injection/property and the WriteLine mapping explicitly; "migrated output" is not enough to demonstrate parity.xUnit runs classes in parallel by default; MSTest runs them serially. When the current project has two or more independently runnable test classes, preserve that effective behavior with:
[assembly: Parallelize(Workers = 0, Scope = ExecutionScope.ClassLevel)]For a one-class project with no explicit xUnit parallel setting, do not add an assembly policy: there is no class-level concurrency to preserve. Always translate explicit CollectionBehavior or xunit.runner.json settings. Never use ExecutionScope.MethodLevel to emulate xUnit. Before applying a fixture-scope or parallelization decision, state what the source shared or serialized and how the target preserves it.
dotnet test builds by default; run a separate build only when needed to isolate a compilation failure.DynamicData, or DataRow literal types[TestMethod] or incorrect runtime-skip conversion[ClassInitialize], TestContext.WriteLine, and Assert.IsExactInstanceOfType<T>; generic claims such as "converted attributes" or "migrated output" are not evidence of parity.Keep the final response concise and outcome-focused:
Run migrate-vstest-to-mtp separately if the user also wants MTP. Use writing-mstest-tests only after parity is established to polish the converted MSTest code.
© dotnet, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 1 other file (references) in plugins/dotnet-test-migration/skills/migrate-xunit-to-mstest of dotnet/skills.
Open the folder on GitHubat commit 1d40f95
We found 2 copies of this SKILL.md (exact, near-identical or edited) in other folders, from 1 other GitHub owner. This page covers the copy in dotnet/skills, which our catalogue first saw on October 7, 2026.
Migrate Xunit To Mstest 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 |
|---|---|---|---|---|---|---|
| Migrate Xunit To Mstest this skilldotnet/skills | 5.6k | 1 repos | ~3.9k | Automated safety check: Pass | MIT | |
| ScottPlot Test RunnerScottPlot/ScottPlot | 6.8k | — | ~308 | Automated safety check: Pass | MIT | |
| Aspire Integration TestingDevBetterCom/DevBetterWeb | 157 | 2 repos | ~2.3k | Automated safety check: Pass | None | |
| New Event Sourceaws/aws-lambda-dotnet | 1.7k | — | ~3k | Automated safety check: Pass | Apache-2.0 | |
| Platform Detectionmicrosoft/testfx | 1k | 2 repos | ~3.3k | Automated safety check: Pass | MIT | |
| Vstest Build Testmicrosoft/vstest | 969 | — | ~1.9k | Automated safety check: Pass | MIT |
ScottPlot/ScottPlot
Run or add ScottPlot 5 tests. Use for unit-test and cookbook-test work; unless explicitly asked otherwise, restrict manual test execution to the Unit Tests…
DevBetterCom/DevBetterWeb
Write integration tests using .NET Aspire's testing facilities with xUnit.
aws/aws-lambda-dotnet
Add a new AWS event source attribute (e.g., Kinesis, Kafka, MQ) to the Lambda .NET Annotations framework, including the attribute class, source generator integration, CloudFormation writer, unit…
microsoft/testfx
Identify a .NET project's test platform, framework, command mode, and SDK-style vs classic project system.
microsoft/vstest
Build, test, and validate changes in the vstest repository. An agent skill from microsoft/vstest.
runceel/ReactiveProperty
Automated, project-wide code coverage and CRAP (Change Risk Anti-Patterns) score analysis for .NET projects with existing unit tests.
dotnet/skills
Resolves .NET runtime frames in Apple .ips crash logs to function names, source files and line numbers using dSYM symbols, atos and the Microsoft symbol server.
dotnet/skills
Scans C# and .NET code for about 50 performance anti-patterns and reports prioritized findings with concrete fixes, at a scan depth you choose.
dotnet/skills
Resolves native crash frames from .NET Android tombstones to function names, source files and line numbers using BuildIds, Microsoft's symbol server and llvm-symbolizer.
dotnet/skills
Activate this skill when BenchmarkDotNet (BDN) is involved in the task — creating, running, configuring, or reviewing BDN benchmarks.
dotnet/skills
Makes .NET projects compatible with Native AOT and trimming by resolving IL trim and AOT analyzer warnings through annotations rather than suppressions.
dotnet/skills
Configures automatic crash dumps or captures dumps from running processes for modern .NET apps on Linux, macOS and Windows, including Docker and Kubernetes.
Works with
Categories
Convert .NET tests from xUnit.net v2/v3 to MSTest v4 while preserving VSTest or MTP. Migrate Xunit To Mstest is an agent skill from dotnet/skills, published by the product's own GitHub organization.net v2/v3 to MSTest v4 while preserving VSTest or MTP.
Migrate Xunit To Mstest fits situations like: replacing xunit packages; fact/Theory/InlineData/MemberData; IClassFixture/ICollectionFixture; ITestOutputHelper.
Run `npx skills add dotnet/skills --skill migrate-xunit-to-mstest -a claude-code`. Or copy the skill folder (plugins/dotnet-test-migration/skills/migrate-xunit-to-mstest in dotnet/skills) into .claude/skills/migrate-xunit-to-mstest in your project. Claude Code loads it when a task matches its description.
Run `npx skills add dotnet/skills --skill migrate-xunit-to-mstest -a codex`. Or copy the skill folder (plugins/dotnet-test-migration/skills/migrate-xunit-to-mstest in dotnet/skills) into .agents/skills/migrate-xunit-to-mstest 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 dotnet/skills --skill migrate-xunit-to-mstest -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/migrate-xunit-to-mstest, .gemini/skills/migrate-xunit-to-mstest, .github/skills/migrate-xunit-to-mstest and .opencode/skills/migrate-xunit-to-mstest in your project.
Going by SKILL.md and its folder, Migrate Xunit To Mstest needs the command-line tools its instructions call (dotnet).
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. 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.
Migrate Xunit To Mstest is published under the MIT licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.9k tokens (SKILL.md is roughly 15k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 7k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Migrate Xunit To Mstest: ScottPlot Test Runner (ScottPlot/ScottPlot, 6.8k stars), Aspire Integration Testing (DevBetterCom/DevBetterWeb, 157 stars), New Event Source (aws/aws-lambda-dotnet, 1.7k stars) and Platform Detection (microsoft/testfx, 1k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
dotnet (a GitHub organization, an official publisher) maintains it in dotnet/skills, which has 5,594 GitHub stars. The repository holds 70 skills in this directory. The repository was last updated on October 9, 2026.
Source: dotnet/skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.