Skip to content

Instantly share code, notes, and snippets.

@tackme31
Created June 21, 2024 09:33
Show Gist options
  • Save tackme31/f8ecd8d813f20818448f808dc7d4d275 to your computer and use it in GitHub Desktop.
Save tackme31/f8ecd8d813f20818448f808dc7d4d275 to your computer and use it in GitHub Desktop.
A moq macher for deeply comparing objects.
public static class ItIs
{
public static T EquivalentTo<T>(T expected)
{
return EquivalentTo(expected, config => config);
}
public static T EquivalentTo<T>(T expected, Func<EquivalencyAssertionOptions<T>, EquivalencyAssertionOptions<T>> config)
{
bool Validate(T actual)
{
try
{
actual.Should().BeEquivalentTo(expected, config);
return true;
}
catch (Exception)
{
false;
}
}
return Match.Create<T>(Validate);
}
}
public class SampleTest
{
[Fact]
public void LoggerShouldBeOutputWhenSavingForm()
{
var logger = new Mock<ILogger>();
var service = new Service(logger.Object);
var formValues = new FormValues
{
Foo = "FOO",
Bar = "BAR",
Baz = "BAZ"
};
service.SaveFormValues(formValues);
var expected = new LogItem
{
LogNo = 1,
LogLevel = LogLevel.Info,
FormValues = JsonSerializer.Serialize(formValues),
};
logger.Verify(mock => mock.Log(ItIs.EquivalentTo(expected)));
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment