| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Name | Name | Last commit date | ||
|---|---|---|---|---|
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
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"
}
};
}
}Support for xUnit
[UsesVerify]
public class Sample
{
[Fact]
public Task Test()
{
var person = ClassBeingTested.FindPerson();
return Verifier.Verify(person);
}
}Support for NUnit
[TestFixture]
public class Sample
{
[Test]
public Task Test()
{
var person = ClassBeingTested.FindPerson();
return Verifier.Verify(person);
}
}Support for MSTest
[TestClass]
public class Sample :
VerifyBase
{
[TestMethod]
public Task Test ()
{
var person = ClassBeingTested.FindPerson();
return Verify(person);
}
}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:
If a Diff Tool is detected it will display the diff:
To verify the 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
}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
The 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.
VerifyJson performs the following actions
[Fact]
public Task VerifyJsonString()
{
var json = "{'key': {'msg': 'No action taken'}}";
return Verifier.VerifyJson(json);
}
[Fact]
public Task VerifyJsonStream()
{
var json = "{'key': {'msg': 'No action taken'}}";
MemoryStream stream = new(Encoding.UTF8.GetBytes(json));
return Verifier.VerifyJson(stream);
}
[Fact]
public Task VerifyJsonJToken()
{
var json = "{'key': {'msg': 'No action taken'}}";
var target = JToken.Parse(json);
return Verifier.VerifyJson(target);
}Results in:
{
key: {
msg: No action taken
}
}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"));
}
}Projects/tools that may be a better alternative to Verify
To report a security vulnerability, use the Tidelift security contact. Tidelift will coordinate the fix and disclosure.
Helmet designed by Leonidas Ikonomou from The Noun Project.
| Back | FazBrowse Home | New Git URL |