log4net - LogicalThreadContext - and unit test cases

log4net, multithreading, unit-testing

Solution

I ended up doing this to get it working:

put this in the TestCleanup() method:

CallContext.FreeNamedDataSlot("log4net.Util.LogicalThreadContextProperties");

Problem

I am starting to write a unit test (MS Test, with Resharper as the test runner). When I set the LogicalThreadContext (see below), my test cases get 'aborted'. Anybody know why? Is this related to the unit test being on a different thread? How do I resolve this? ``` [TestClass] public class ContextInfoTest { private ILog _log; [TestInitialize] public void TestInitialize() { // logging configured in assembly.info _log = LogManager.GetLogger(this.GetType()); } [TestMethod] public void FigureOutWhyAborting() { string input = "blah"; LogicalThreadContext.Properties["mypropertyname"] = input; string output = LogicalThreadContext.Properties["mypropertyname"] as string; Assert.AreEqual(input, output); } [TestMethod] public void ThisWorks() { string input = "blah"; CallContext.LogicalSetData("mypropertyname", input); string output = CallContext.LogicalGetData("mypropertyname") as string; Assert.AreEqual(input, output); } ``` The weird thing is that if I were to debug and step through the code, the Assert.AreEqual does get called and passes, so something is happening after that line of code... which is why I think it might have something to do with the test thread, etc. Thanks! UPDATE: So I ran this test in MSTest and got this exception (Resharper didn't show it) Unit Test Adapter threw exception: Type is not resolved for member 'log4net.Util.PropertiesDictionary,log4net, Version=1.2.13.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a'.. I'm using log4net v1.2.13, on VS2013, .Net 4.5. This link seems to suggest it is a referenced assemblies problem, but there is no resolution. Any additional ideas would be greatly welcome, GAC'ing log4net is not an option. https://issues.apache.org/jira/browse/LOG4NET-398

Original source