Some of my unit tests are failing after updating Microsoft.Extensions.Logging.Abstractions from Version=2.0.0.0 to Version=3.1.1.0.
I have an ILogger mocked as so:
var loggerMock = new Mock<ILogger<BillingEventProcessor>>();
loggerMock.Setup(l => l.Log(
It.IsAny<LogLevel>(),
It.IsAny<EventId>(),
It.IsAny<IReadOnlyList<KeyValuePair<string, object>>>(),
It.IsAny<Exception>(),
It.IsAny<Func<object, Exception, string>>()));
And a unit that verifies a call to Log() has been made:
logger.Verify(l => l.Log(
It.IsAny<LogLevel>(),
It.IsAny<EventId>(),
It.IsAny<IReadOnlyList<KeyValuePair<string, object>>>(),
It.IsAny<Exception>(),
It.IsAny<Func<object, Exception, string>>())
);
Prior to updating, the IReadOnlyList<KeyValuePair<string, object>>
type was of type FormattedLogValues
.
In v2, FormattedLogValues was a public class but in v3.1.1, FormattedLogValues is an internal readonly struct. This change appears to be related to the test failures.
I've tried using It.IsAny for that 3rd parameter instead of the IReadOnlyList or FormattedLogValues but I didn't have any luck with that.
Anyone know how I can alter this test code to make the test pass? I can see from debugging info that a call to the Log method is made as expected, I just can't figure out how to set up these mocks correctly with the internal readonly struct parameter.
This is a .NET Core 2.2 project.