Verification tool to enable simple approval of complex models using Json.net.
- Usage
- Received and Verified
- Not valid json
- Extensions
- Serializer Settings
- File Extension
- File naming
- Named Tuples
- Scrubbers
- Diff Tool
- Using anonymous types
- Verifying binary data
- Compared to ApprovalTests
- https://nuget.org/packages/Verify.Xunit/
- https://nuget.org/packages/Verify.NUnit/
- https://nuget.org/packages/Verify.MSTest/
Given a class to be tested:
public static class ClassBeingTested
{
public static Person FindPerson()
{
return new Person
{
Id = new Guid("ebced679-45d3-4653-8791-3d969c4a986c"),
Title = Title.Mr,
GivenNames = "John",
FamilyName = "Smith",
Spouse = "Jill",
Children = new List<string>
{
"Sam",
"Mary"
},
Address = new Address
{
Street = "4 Puddle Lane",
Country = "USA"
}
};
}
}
It can be tested as follows:
public class SampleTest :
VerifyBase
{
[Fact]
public Task Simple()
{
var person = ClassBeingTested.FindPerson();
return Verify(person);
}
public SampleTest(ITestOutputHelper output) :
base(output)
{
}
}
[TestFixture]
public class SampleTest
{
[Test]
public Task Simple()
{
var person = ClassBeingTested.FindPerson();
return Verifier.Verify(person);
}
}
[TestClass]
public class SampleTest :
VerifyBase
{
[TestMethod]
public Task Simple()
{
var person = ClassBeingTested.FindPerson();
return Verify(person);
}
}
When the test is initially run will fail with:
First verification. SampleTest.Simple.verified.txt not found.
Verification command has been copied to the clipboard.
The clipboard will contain the following:
move /Y "C:\Code\Sample\SampleTest.Simple.received.txt" "C:\Code\Sample\SampleTest.Simple.verified.txt"
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
This will result in the SampleTest.Simple.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 Person
{
Id = new Guid("ebced679-45d3-4653-8791-3d969c4a986c"),
Title = Title.Mr,
// Middle name added
GivenNames = "John James",
FamilyName = "Smith",
Spouse = "Jill",
Children = new List<string>
{
"Sam",
"Mary"
},
Address = new Address
{
// 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:
move /Y "C:\Code\Sample\SampleTest.Simple.received.txt" "C:\Code\Sample\SampleTest.Simple.verified.txt"
And the Diff Tool is will display the diff:
The same approach can be used to verify the results and the change to SampleTest.Simple.verified.txt
is committed to source control along with the change to ClassBeingTested
.
The clipboard behavior can be disable using the following:
var settings = new VerifySettings();
settings.DisableClipboard();
- All
*.verified.*
files should be committed to source control. - All
*.received.*
files should be excluded from source control.
Note that the output is technically not valid json. Single quotes are used and names are not quoted. The reason for this is to make the resulting output easier to read and understand.
- Extends Verify to allow verification of documents (pdf, docx, xslx, and pptx) via Aspose
- Adds Verify support to verify NServiceBus Test Contexts
See closed milestones.
Helmet designed by Leonidas Ikonomou from The Noun Project.