public void LogWithSingleLoggerThrowing() { var level = LevelToLog.Info; var exception = new LoggingException(); var subLogger = new Mock <ILogger>(); { subLogger.Setup(l => l.Level) .Returns(level); subLogger.Setup(l => l.Log(It.IsAny <LogMessage>())) .Throws(exception); subLogger.Setup(l => l.ShouldLog(It.IsAny <LogMessage>())) .Returns <LogMessage>(m => m.Level >= level); } var logger = new DistributedLogger(new ILogger[] { subLogger.Object }); try { logger.Log(new LogMessage(LevelToLog.Debug, "a")); } catch (LoggingException e) { Assert.AreEqual(1, e.InnerExceptions.Count); Assert.AreSame(exception, e.InnerExceptions[0]); } }
public void LogWithMultipleLoggersWithOneThrowing() { var logger1Level = LevelToLog.Debug; var logger1Exception = new LoggingException(); var subLogger1 = new Mock <ILogger>(); { subLogger1.Setup(l => l.Level) .Returns(logger1Level); subLogger1.Setup(l => l.Log(It.IsAny <LogMessage>())) .Throws(logger1Exception); subLogger1.Setup(l => l.ShouldLog(It.IsAny <LogMessage>())) .Returns <LogMessage>(m => m.Level >= logger1Level); } var logger2Level = LevelToLog.Info; LogMessage logger2Message = null; var subLogger2 = new Mock <ILogger>(); { subLogger2.Setup(l => l.Level) .Returns(logger2Level); subLogger2.Setup(l => l.Log(It.IsAny <LogMessage>())) .Callback <LogMessage>(m => logger2Message = m); subLogger2.Setup(l => l.ShouldLog(It.IsAny <LogMessage>())) .Returns <LogMessage>(m => m.Level >= logger2Level); } var logger = new DistributedLogger(new ILogger[] { subLogger1.Object, subLogger2.Object }); var messageToLog = new LogMessage(LevelToLog.Info, "a"); try { logger.Log(messageToLog); } catch (LoggingException e) { Assert.AreEqual(1, e.InnerExceptions.Count); Assert.AreSame(logger1Exception, e.InnerExceptions[0]); } Assert.AreSame(messageToLog, logger2Message); }