Home > Windows > Visual Studio > Prefer GUI > TUnit > GitHub Actions
Add the following packages to the test project:
<PackageReference Include="TUnit" Version="1.56.0" />
<PackageReference Include="Verify.TUnit" Version="31.20.0" />All examples use Implicit Usings. Ensure <ImplicitUsings> is set to enable to ensure examples compile correctly.
<ImplicitUsings>enable</ImplicitUsings>
If ImplicitUsings are not enabled, substitute usages of Verify() with Verifier.Verify().
- All
*.received.*files should be excluded from source control.
eg. add the following to .gitignore
*.received.*
If using UseSplitModeForUniqueDirectory also include:
*.received/
All *.verified.* files should be committed to source control.
Text variants of verified and received have the following characteristics:
- UTF8 with a Byte order mark (BOM)
- Newlines as line-feed (lf)
- No trailing newline
This manifests in several ways:
All text extensions of *.verified.* should have:
eolset tolfworking-tree-encodingset toUTF-8
Note: working-tree-encoding=UTF-8 is correct even though Verify writes files with a BOM. Git does not strip or add the BOM — it passes through transparently. The UTF-8-BOM encoding would explicitly add a BOM on checkout and strip it on commit (so the internal blob differs from the working tree), but that is not the desired behavior since Verify writes the BOM itself and it should be preserved in the blob.
All Binary files should also be marked to avoid merging and line ending issues with binary files.
eg add the following to .gitattributes
*.verified.txt text eol=lf working-tree-encoding=UTF-8
*.verified.xml text eol=lf working-tree-encoding=UTF-8
*.verified.json text eol=lf working-tree-encoding=UTF-8
*.verified.bin binary
On Windows, if core.autocrlf is set to true, files may show as modified with no actual content changes. To fix this:
git config --global core.autocrlf input
If modifying text verified/received files in an editor, it is desirable for the editor to respect the above conventions. For EditorConfig enabled the following can be used:
# Verify settings
[*.{received,verified}.{json,txt,xml}]
charset = utf-8-bom
end_of_line = lf
indent_size = unset
indent_style = unset
insert_final_newline = false
tab_width = unset
trim_trailing_whitespace = false
[*.{received,verified}.{json,xml,html,htm,yaml,svg}]
indent_size = 2
indent_style = space
Note that the above are suggested for subset of text extension. Add others as required based on the text file types being verified.
Conventions can be checked by calling VerifyChecks.Run() in a test
public class VerifyChecksTests
{
[Test]
public Task Run() =>
VerifyChecks.Run();
}Install DiffEngineTray
DiffEngineTray sits in the Windows tray. It monitors pending changes in snapshots, and provides a mechanism for accepting or rejecting those changes.
dotnet tool install -g DiffEngineTray
This is optional, but recommended. Also consider enabling Run at startup.
The text comparison behavior of Verify is pluggable. The default behaviour, on failure, is to output both the received and the verified contents as part of the exception. This can be noisy when verifying large strings.
Verify.DiffPlex changes the text compare result to highlighting text differences inline.
This is optional, but recommended.
<PackageReference Include="Verify.DiffPlex" Version="*" />[ModuleInitializer]
public static void Initialize() =>
VerifyDiffPlex.Initialize();public class Sample
{
[Test]
public Task Test()
{
var person = ClassBeingTested.FindPerson();
return Verify(person);
}
}Verify supports many Diff Tools for comparing received to verified. While IDEs are supported, due to their MDI nature, using a different Diff Tool is recommended.
Tools supported by Windows:
- MsWordDiff
- MsExcelDiff
- BeyondCompare
- P4Merge
- DeltaWalker
- WinMerge
- TortoiseGitMerge
- TortoiseGitIDiff
- TortoiseMerge
- TortoiseIDiff
- KDiff3
- Guiffy
- ExamDiff
- Diffinity
- Rider
- Vim
- Neovim
Use a if: failure() condition to upload any *.received.* files if the build fails.
- name: Upload Test Results
if: failure()
uses: actions/upload-artifact@v4
with:
name: verify-test-results
path: |
**/*.received.*