VerifyTests / Verify
Projects that are alternatives of or similar to Verify
Verify
Verify is a snapshot tool that simplifies the assertion of complex data models and documents.
Verify is called on the test result during the assertion phase. It serializes that result and stores it in a file that matches the test name. On the next test execution, the result is again serialized and compared to the existing file. The test will fail if the two snapshots do not match: either the change is unexpected, or the reference snapshot needs to be updated to the new result.
Support is available via a Tidelift Subscription.
Part of the .NET Foundation
Contents
- Usage
- Received and Verified
- Static settings
- Videos
- Extensions
- More Documentation
- Alternatives
- Security contact information
NuGet packages
- https://nuget.org/packages/Verify.Xunit/
- https://nuget.org/packages/Verify.NUnit/
- https://nuget.org/packages/Verify.MSTest/
Usage
Class being tested
Given a class to be tested:
public static class ClassBeingTested
{
public static Person FindPerson()
{
return new()
{
Id = new("ebced679-45d3-4653-8791-3d969c4a986c"),
Title = Title.Mr,
GivenNames = "John",
FamilyName = "Smith",
Spouse = "Jill",
Children = new()
{
"Sam",
"Mary"
},
Address = new()
{
Street = "4 Puddle Lane",
Country = "USA"
}
};
}
}
xUnit
Support for xUnit
[UsesVerify]
public class Sample
{
[Fact]
public Task Test()
{
var person = ClassBeingTested.FindPerson();
return Verifier.Verify(person);
}
}
NUnit
Support for NUnit
[TestFixture]
public class Sample
{
[Test]
public Task Test()
{
var person = ClassBeingTested.FindPerson();
return Verifier.Verify(person);
}
}
MSTest
Support for MSTest
[TestClass]
public class Sample :
VerifyBase
{
[TestMethod]
public Task Test ()
{
var person = ClassBeingTested.FindPerson();
return Verify(person);
}
}
Initial Verification
When the test is initially run will fail with:
First verification. Sample.Test.verified.txt not found.
Verification command has been copied to the clipboard.
The clipboard will contain the following:
cmd /c move /Y "C:\Code\Sample\Sample.Test.received.txt" "C:\Code\Sample\Sample.Test.verified.txt"
Notes:
- More Clipboard info.
- An alternative to using the clipboard is the DiffEngineTray tool.
If a Diff Tool is detected it will display the diff:
To verify the result:
- Execute the command from the clipboard, or
- Use the diff tool to accept the changes, or
- Manually copy the text to the new file
Verified result
This will result in the Sample.Test.verified.txt
being created:
{
GivenNames: John,
FamilyName: Smith,
Spouse: Jill,
Address: {
Street: 4 Puddle Lane,
Country: USA
},
Children: [
Sam,
Mary
],
Id: Guid_1
}
Subsequent Verification
If the implementation of ClassBeingTested
changes:
public static class ClassBeingTested
{
public static Person FindPerson()
{
return new()
{
Id = new("ebced679-45d3-4653-8791-3d969c4a986c"),
Title = Title.Mr,
// Middle name added
GivenNames = "John James",
FamilyName = "Smith",
Spouse = "Jill",
Children = new()
{
"Sam",
"Mary"
},
Address = new()
{
// Address changed
Street = "64 Barnett Street",
Country = "USA"
}
};
}
}
And the test is re run it will fail with
Verification command has been copied to the clipboard.
Assert.Equal() Failure
↓ (pos 21)
Expected: ···\n GivenNames: 'John',\n FamilyName: 'Smith',\n Spouse: 'Jill···
Actual: ···\n GivenNames: 'John James',\n FamilyName: 'Smith',\n Spouse:···
↑ (pos 21)
The clipboard will again contain the following:
cmd /c move /Y "C:\Code\Sample\Sample.Test.received.txt" "C:\Code\Sample\Sample.Test.verified.txt"
See also: Clipboard
Diff Tool is will display the diff:
TheThe same approach can be used to verify the results and the change to Sample.Test.verified.txt
is committed to source control along with the change to ClassBeingTested
.
Received and Verified
- All
*.verified.*
files should be committed to source control. - All
*.received.*
files should be excluded from source control.
Static settings
Most settings are available at the both global level and at the instance level.
When modifying settings at the both global level it should be done using a Module Initializer:
using System.Runtime.CompilerServices;
using System.Threading.Tasks;
using VerifyTests;
using VerifyXunit;
using Xunit;
[UsesVerify]
public class StaticSettings
{
[Fact]
public Task Test()
{
return Verifier.Verify("String to verify");
}
}
public static class StaticSettingsUsage
{
[ModuleInitializer]
public static void Initialize()
{
VerifierSettings.AddScrubber(_ => _.Replace("String to verify", "new value"));
}
}
//Only required if using a legacy version of .net
#if(!NET5_0)
namespace System.Runtime.CompilerServices
{
[AttributeUsage(AttributeTargets.Method, Inherited = false)]
public sealed class ModuleInitializerAttribute :
Attribute
{
}
}
#endif
Videos
Extensions
- Verify.AngleSharp: Html verification utilities via AngleSharp.
- Verify.Aspose: Verification of documents (pdf, docx, xslx, and pptx) via Aspose.
- Verify.Blazor: Verification of Blazor Component via bunit or via raw Blazor rendering.
- Verify.Cosmos: Verification of Azure CosmosDB.
- Verify.DiffPlex: Comparison of text via DiffPlex.
- Verify.EntityFramework: Verification of EntityFramework bits.
- Verify.HeadlessBrowsers: Verification of Web UIs using Playwright, Puppeteer Sharp, or Selenium.
- Verify.ICSharpCode.Decompiler: Comparison of assemblies and types via ICSharpCode.Decompiler.
- Verify.ImageMagick: Verification and comparison of images via Magick.NET.
- Verify.ImageSharp: Verification of images via ImageSharp.
- Verify.NServiceBus: Verify NServiceBus Test Contexts.
- Verify.Phash: Comparison of documents via Phash.
- Verify.RavenDb: Verification of RavenDb bits.
- Verify.SqlServer: Verification of SqlServer bits.
- Verify.Uno: Verification to allow verification of Uno UIs.
- Verify.Web: Verification of web bits.
- Verify.WinForms: Verification of WinForms UIs.
- Verify.Xamarin: Verification of Xamarin UIs.
- Verify.Xaml: Verification of Xaml UIs.
- Spectre.Verify.Extensions: Add an attribute driven file naming convention to Verify.
More Documentation
- Clipboard
- Compared to assertions
- Verify options
- Serializer Settings
- File naming
- Parameterised tests
- Named Tuples
- Scrubbers
- Diff Engine
- Diff Tools
- Diff Tool Order
- Custom Diff Tool
- Using anonymous types
- Verifying binary data
- Http Recording
- Build server
- Comparers
- Converters
- Compared to ApprovalTests
Alternatives
Projects/tools that may be a better alternative to Verify
Security contact information
To report a security vulnerability, use the Tidelift security contact. Tidelift will coordinate the fix and disclosure.
Icon
Helmet designed by Leonidas Ikonomou from The Noun Project.