public void Trace_LogAnonymousObjectOnEnabledLevel_LogsMessage()
        {
            var logger = new TestableLogger(Level.Trace, _output);
            int number = Factory.GetInteger();

            LoggerExtensions.Trace(logger, new { message = "Hello", number });
            Assert.Equal($"TRACE: {{\"message\":\"Hello\",\"number\":{number}}}", logger.Messages.First());
        }
        public void Trace_LogAnonymousObjectOnEnabledLevel_VerifyLog()
        {
            var logMock = new Mock <ILogger>();
            int number  = Factory.GetInteger();

            LoggerExtensions.Trace(logMock.Object, new { message = "Hello", number });
            logMock.VerifyLog <object>(Level.Trace, Times.Once());
        }
        public void Trace_LogAnonymousObjectAndExceptionOnEnabledLevel_VerifyLog()
        {
            var logMock   = new Mock <ILogger>();
            int number    = Factory.GetInteger();
            var exception = new Exception("OMG!");

            LoggerExtensions.Trace(logMock.Object, new { message = "Hello", number }, exception);
            logMock.VerifyLog <object, Exception>(Level.Trace, exception, Times.Once());
        }
        public void Trace_LazyLogAnonymousObjectOnEnabledLevel_CallMessageFormatter()
        {
            bool isInvoked = false;
            var  logger    = new TestableLogger(Level.Trace, _output);
            int  state     = Factory.GetInteger();

            LoggerExtensions.Trace(logger, state, number =>
            {
                isInvoked = true;
                return(new { message = "Hello", number });
            });
            Assert.True(isInvoked);
        }
        public void Trace_LazyLogAnonymousObjectAndExceptionOnDisabledLevel_DoesNotCallMessageFormatter()
        {
            bool isInvoked = false;
            var  logger    = new TestableLogger(Level.Error, _output);
            int  state     = Factory.GetInteger();

            LoggerExtensions.Trace(logger, state, new Exception("OMG!"), (number, ex) =>
            {
                isInvoked = true;
                return(new { message = "Hello", number });
            });
            Assert.False(isInvoked);
        }