SerilogSinksInMemory icon indicating copy to clipboard operation
SerilogSinksInMemory copied to clipboard

`WithException` assertion for comparing logged exception within specific message

Open rafek1241 opened this issue 3 years ago • 1 comments

suggestion:


            var data = new Exception("Example error exception");
            _logger.Information(data, "Example error");

            InMemorySink.Instance
                .Should()
                .HaveMessage("Example error with sensitive data")
                .WithException(data) //<-- addition
                .WithException(assertions=> assertions //<-- another variant
                   .WithMessage(data.Message)
                   .WithData("somekey",data["somekey"])
                )

rafek1241 avatar Mar 07 '22 08:03 rafek1241

Hi @rafek1241

I'm not entirely sure yet on the way this should actually look. As part of #22 I actually added some extension methods which add HaveErrorMessageWithException<T> as part of the test case.

I'm currently thinking along the lines of adding the following:

private void GivenLogMessaageWithException()
{
    var exception = new Exception("BANG BANG!");
    exception.Data.Add("some", "property");

    _logger.Error(exception, "BANG!");
}

[Fact]
public void GivenLogMessageWithException_NewStyle()
{
    GivenLogMessaageWithException();

    _inMemorySink
        .Should()
        .HaveMessage("BANG!")
        .Appearing()
        .Once()
        .WithException<Exception>() // Asserts that there is an exception and that the type matches the expectation
        .AndMessage("BANG BANG!");
}

[Fact]
public void GivenLogMessageWithException_NewStyleFullMatch()
{
    GivenLogMessaageWithException();

    var exception = new Exception("BANG BANG!");
    exception.Data.Add("some", "property");

    _inMemorySink
        .Should()
        .HaveMessage("BANG!")
        .Appearing()
        .Once()
        .WithException<Exception>()
        .Matching(exception); // This is a shortcut for WithException<Exception>().Subject.Should().BeEquivalentTo(exception)
}

Let me know what you think.

sandermvanvliet avatar Mar 26 '22 14:03 sandermvanvliet