public void InitialiseMockLogger() { var hierarchy = LogManager.GetRepository() as Hierarchy; mockLogger = hierarchy.Root.GetAppender("MemoryAppender") as MemoryAppender; if (mockLogger != null) { mockLogger.Clear(); } }
public void Log4NetCatchesUnhandledExceptionsTest() { // Arrange const string exceptionMessage = "myMessage"; var testUri = new Uri("net.pipe://localhost/ExceptionThrower"); var memoryAppender = new MemoryAppender(); var hierarchy = (Hierarchy)LogManager.GetRepository(); hierarchy.Root.AddAppender(memoryAppender); hierarchy.Root.Level = Level.Error; hierarchy.Configured = true; memoryAppender.Clear(); var clientEndpoint = new ServiceEndpoint(ContractDescription.GetContract(typeof(IExceptionThrowerService)), new NetNamedPipeBinding(), new EndpointAddress(testUri)); var serviceEndpoint = new ServiceEndpoint(ContractDescription.GetContract(typeof(IExceptionThrowerService)), new NetNamedPipeBinding(), new EndpointAddress(testUri)); var factory = new ChannelFactory<IExceptionThrowerService>(clientEndpoint); // Act using (var host = new ServiceHost(typeof(ExceptionThrowerService))) { host.AddServiceEndpoint(serviceEndpoint); host.Description.Behaviors.Add(new LogUnhandledExceptionBehavior()); host.Open(); try { var service = factory.CreateChannel(); service.ThrowException(exceptionMessage); } catch(FaultException) { //swallow the returned exception (we know it's coming back) } } // Assert var events = memoryAppender.GetEvents(); Assert.That(events.Count(), Is.GreaterThan(0)); Assert.That(events.Last().ExceptionObject.Message, Is.EqualTo(exceptionMessage)); //Display received exceptions events.Select(x => x.ExceptionObject.ToString()).ToList().ForEach(Console.WriteLine); }