Meziantou.Framework.SnapshotTesting
2.0.0
Prefix Reserved
dotnet add package Meziantou.Framework.SnapshotTesting --version 2.0.0
NuGet\Install-Package Meziantou.Framework.SnapshotTesting -Version 2.0.0
<PackageReference Include="Meziantou.Framework.SnapshotTesting" Version="2.0.0" />
<PackageVersion Include="Meziantou.Framework.SnapshotTesting" Version="2.0.0" />
<PackageReference Include="Meziantou.Framework.SnapshotTesting" />
paket add Meziantou.Framework.SnapshotTesting --version 2.0.0
#r "nuget: Meziantou.Framework.SnapshotTesting, 2.0.0"
#:package Meziantou.Framework.SnapshotTesting@2.0.0
#addin nuget:?package=Meziantou.Framework.SnapshotTesting&version=2.0.0
#tool nuget:?package=Meziantou.Framework.SnapshotTesting&version=2.0.0
Meziantou.Framework.SnapshotTesting
Meziantou.Framework.SnapshotTesting validates serialized values against snapshot files stored on disk.
Basic usage
public sealed class SampleTests
{
[Fact]
public void ValidateUser()
{
var value = new { Name = "John", Age = 42 };
Snapshot.Validate(value);
}
}
For typed snapshots:
Snapshot.Validate(imageBytes, SnapshotType.Png);
Snapshot.Validate(svgText, SnapshotType.Svg);
File naming convention
Snapshots are stored in a __snapshots__ directory next to the test source file:
- expected snapshots:
*.verified.<extension> - mismatch output:
*.actual.<extension>
Example:
__snapshots__/SampleTests_ValidateUser.verified.txt__snapshots__/SampleTests_ValidateUser.actual.txt
Notes:
- By default, snapshot names include class name and test name to avoid collisions across test classes.
.actualfiles are always written when a snapshot does not match.- If a single assertion serializes multiple files, an index suffix (
_0,_1, ...) is appended. - If names are too long (or already end with
.verified/.actual), a stable hash is added.
You can choose how snapshot names are generated using SnapshotSettings.SnapshotNamingStrategy:
SnapshotNamingStrategies.TestNameSnapshotNamingStrategies.ClassName_TestName(default)SnapshotNamingStrategies.FullName
Approving snapshots
To approve generated *.actual.* files, you can use the dedicated tool package:
dotnet tool install --global Meziantou.Framework.SnapshotTesting.Tool
Meziantou.Framework.SnapshotTesting.Tool approve
Use --interactive to approve or reject snapshots one by one.
Snapshot types
SnapshotType controls extension and optional metadata (MimeType, DisplayName). This can also affect the serializer.
Test context
Snapshot naming uses test context when available:
Snapshot.TestContext(AsyncLocal<SnapshotTestContext?>) can be set explicitly.- Xunit v3, TUnit, and NUnit display names are auto-detected to improve generated file names.
Customization
Use SnapshotSettings to customize behavior:
Serializers(SnapshotSerializerCollection)Comparers(SnapshotComparerCollection)SnapshotUpdateStrategy(Disallow,Overwrite,OverwriteWithoutFailure,MergeTool,MergeToolSync)AssertionExceptionCreatorandErrorMessageFormatterSnapshotPathStrategyfor full path generation
You can also set the default strategy using the SNAPSHOTTESTING_STRATEGY environment variable.
The value is case-insensitive and must match one of the SnapshotUpdateStrategy static property names (for example: DISALLOW, MergeTool, overwritewithoutfailure).
var settings = SnapshotSettings.Default with
{
SnapshotUpdateStrategy = SnapshotUpdateStrategy.Disallow,
};
Snapshot.Validate(value, SnapshotType.Default, settings);
The default serializers handle human-readable objects, byte[], and Stream.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 is compatible. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- DiffEngine (>= 19.2.0)
- Meziantou.Framework.FullPath (>= 2.0.0)
- Meziantou.Framework.HumanReadableSerializer (>= 3.0.1)
-
net8.0
- DiffEngine (>= 19.2.0)
- Meziantou.Framework.FullPath (>= 2.0.0)
- Meziantou.Framework.HumanReadableSerializer (>= 3.0.1)
-
net9.0
- DiffEngine (>= 19.2.0)
- Meziantou.Framework.FullPath (>= 2.0.0)
- Meziantou.Framework.HumanReadableSerializer (>= 3.0.1)
NuGet packages (1)
Showing the top 1 NuGet packages that depend on Meziantou.Framework.SnapshotTesting:
| Package | Downloads |
|---|---|
|
Meziantou.Framework.SnapshotTesting.ImageSharp
Enables verification of objects using file-based snapshots |
GitHub repositories
This package is not used by any popular GitHub repositories.