type net name logger log example app multithreading unit-testing log4net

multithreading - example - log4net logger name



log4net-LogicalThreadContext-y casos de prueba de unidad (3)

Entonces, no puedo agradecerte lo suficiente por resolver esto para llamar a FreeNamedDataSlot. Esto me encendió a mi respuesta que funcionó para mí. En lugar de pasar el espacio de nombres completo de la clase, solo tuve que usar el nombre de la clase:

Esto se usó en algún lugar profundo de mi capa de acceso a datos:

MySession session = (MySession)System.Runtime.Remoting.Messaging.CallContext.LogicalGetData("MySession"); [TestCleanup] public void Cleanup() { CallContext.FreeNamedDataSlot("MySession"); }

Esto funcionó perfecto para mí! Esperemos que esto ayude a alguien más al usar el entorno de prueba de Visual Studio.

Estoy empezando a escribir una prueba unitaria (MS Test, con Resharper como el corredor de prueba). Cuando configuro LogicalThreadContext (ver más abajo), mis casos de prueba se "cancelan". Alguien sabe por qué? ¿Está esto relacionado con la prueba de unidad en un hilo diferente? ¿Cómo resuelvo esto?

[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); }

Lo extraño es que si tuviera que depurar y revisar el código, Assert.AreEqual recibe llamadas y pasa, por lo que algo está sucediendo después de esa línea de código ... por lo que creo que podría tener algo que ver con el hilo de prueba, etc.

¡Gracias!

ACTUALIZACIÓN: Así que ejecuté esta prueba en MSTest y obtuve esta excepción (Resharper no la mostró)

El adaptador de prueba de unidad arrojó una excepción: el tipo no se resuelve para el miembro ''log4net.Util.PropertiesDictionary, log4net, Version = 1.2.13.0, Culture = neutral, PublicKeyToken = 669e0ddf0bb1aa2a'' ..

Estoy usando log4net v1.2.13, en VS2013, .Net 4.5.

Este enlace parece sugerir que se trata de un problema de ensamblajes referenciados, pero no hay resolución. Cualquier idea adicional sería muy bienvenida, GAC''ing log4net no es una opción. https://issues.apache.org/jira/browse/LOG4NET-398


Gracias a todos por los consejos, trato con:

[TestCleanup] public void Cleanup() { CallContext.FreeNamedDataSlot("log4net.Util.LogicalThreadContextProperties"); }

Y funciona !!


Terminé haciendo esto para que funcione:

ponga esto en el método TestCleanup ():

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