Una historia de bugs

Hace unos días encontré un error en Moq, el framework de Mock que estoy usando actualmente. Tuve un presentimiento por el stack trace de la excepción que era un error de DynamicProxy, sabiendo que Moq utiliza DynamicProxy de Castle y conociendo un poco DynamicProxy, decidí investigar Moq por dentro.

Lo primero que hice fue escribir un test en Moq que fallará, pero adivine qué?, este es un tipo de error muy raro relacionado al debugger de visual studio, así que si el debugger no esta “enganchado”, el error no aparece. Lo segundo que hice fue aislar el problema a DynamicProxy, y ahí fue cuando realmente me di cuenta que estaba directamente relacionado con DynamicProxy. Acto seguido, intente reproducir el problema en la versión trunk de dynamicproxy, que evidentemente no es la que estaba usando mi versión de Moq. Y también fallaba. Todo lo que he comentado hasta este punto ha sido con alguna ayuda de mi amigo de Polonia, Krzysztof Kozmic. Pero en este punto es donde mi participación en la historia termina. Y se puede leer todo el hilo acá.

A partir de que cargo el caso DP-115 es donde empieza a actuar directamente Krzysztof. Según nos comenta, por la complejidad del error, en su camino a descubrirlo a encontrado bugs en:

  • Reflector
  • Resharper
  • Y parece que finalmente es un error en el debugger.

Imaginó que este trabajo es muy duro ya que implica revisar incluso como ciertas cosas son compiladas. Vengo siguiendo muy de cerca los pasos de Krzysztof, simplemente por que me apasiona aprender. He visto cosas tan maravillosas como esta, es practicamente lo que DynamicProxy hace tras bambalinas… En 35 líneas de código, mi amigo ha creado un tipo, heredando una interfaz, ha definido su métodos genérico con constraints, ha generado un ensamblado dinámicamente, ha guardado el ensamblado. WAW!

Desde ya felicitaciones a Krzysztof. Seguramente él no va a entender nada de este post por que esta en español, a menos que use un traductor.


blog comments powered by Disqus
  • Categories

  • Archives