An independent tool for .NET developers, one test class at a time
.NET Test ClinicTests that can fail, data rows that match, and a clean move between MSTest, xUnit, NUnit and TUnit.
Paste a C# test class. Free in your browser: every test and data row counted, and the ones that cannot do their job - async void, data rows that do not match the parameters, tests that assert nothing, Thread.Sleep, swallowed exceptions, .Result - plus near-duplicate tests that want to be data-driven and each framework's traps: [ExpectedException], reversed AreEqual, NUnit 4's classic asserts, un-awaited TUnit assertions. A run rewrites the class, or ports it; the page re-scans the result and checks no test or data row was lost.
1 Your test class free
2 The scan free
Against the rules of the four C# testing skills. Nothing leaves your browser for this part.
Where the problems are
Every test
Findings
The attribute map
3 The review or the port metered
The reply, as it came
Findings
The scan's calls
Kept on purpose
Caveats
The map
Packages
Behaviour notes
Caveats
Diff
The class
Checked against the scan
Saved classes
How it works
The scan reads the class with comments ignored, works out the framework from its usings and attributes, and lists every test with its data rows and assertion count - the same counts the page checks a rewrite or a port against. Its rules come from the csharp-mstest, csharp-xunit, csharp-nunit and csharp-tunit skills.
The review and the port are written by a language model from your class and the scan's facts. The page holds the reply to the scan: every error and warning answered by rule id; a rewrite re-scanned in the same framework; a port re-scanned as the target framework with no source attributes left; and in both, every test name and every data row still there. Nothing is built or run; check with dotnet test.