miércoles, 11 de noviembre de 2009

System.TypeLoadException: Could not load type al hacer Unit Test a una solución de SharePoint

Síntoma:

Al hacer una prueba unitaria tan sencilla como instanciar en memoria una clase despliega el error mencionado en el artículo.  Los demás test si funcionan pero este nuevo no.

Código de prueba con NUnit:

[TestFixture]
   public class TestFamiliarRepositorio
   {
       [Test]
       public void Test1()
       {
           var x = new DummyRepositorio();
           Assert.IsNotNull(x);
       }
   }

Escenario:

Software Instalado:

  • Visual Studio 2008 SP1
  • WSPBuilder
  • Resharper 4.5
  • Windows Server 2003 con SP2

Tipos de Proyectos en la Solución:

  • 2 Class Library (Dominio, Repositorio)
  • WebPart Project (Plantilla WSPBuilder)
  • Test Library (Pruebas unitarios del Repositorio)

Después de una refactorización con Resharper al crear este nuevo test para un nuevo Repositorio me mostró el error:

System.TypeLoadException: Could not load type

Que hice para que no lo haga usted que de todos modos no me funcionó:

Desinstalar Resharper, Instalar NUnit 2.5.2 y correr el test allí que me dio el mismo error. Reinicié el Visual Studio 2008 incontables veces y la máquina virtual donde estaba instalado.

Solución final:

El proyecto Web Part requiere que los ensamblados asociados al Web Part estén firmamos con una llave al parecer en una de las refactorizaciones se daño.  Lo que hice fue eliminar las firmas de los DLL y ejecutar los test y todo funcionó bien.  Luego agregar nuevas llaves y dejar los DLL´s firmados y con ello todo volvió a la normalidad (En propiedades del proyecto). 

image

Recuerdo que ya una vez tuve el mismo problema y me decidí cambiar de las Visual Studio Extension Tools for SharePoint v 1.2. para WSPBuilder entre otras cosas así que creo que esto hubiese corregido también el problema que en aquel entonces me dio.  Igual estoy muy contento con WSPBuilder y no haré el cambio por lo menos  no hasta VS 2010 que ya están integradas las VSe dentro del IDE, y que ya trae todas las funcionalidades que hacen atractivo WSPBuilder pero amigo lector si le da el error:

System.TypeLoadException: Could not load type

 

Favor revise los ensamblados firmados que pienso muy seguramente le resolverán el problema.

Código de Prueba que al final corrió con el Framework de testing integrado de VS 2008:

[TestMethod]
public void TestMethod_ObtenerListadoPorCodigoEmpleado_FamiliarRepositorio_InstanciaColleccionEsperado()
{
    IFamiliarRepositorio familiarRepo = new FamiliarRepositorio("nombreConexion");
    const int codigoEmpleadoPrueba = 1;
    var listadoEsperado = familiarRepo.ObtenerListadoPorCodigoEmpleado(codigoEmpleadoPrueba);
    Assert.IsNotNull(listadoEsperado);
}

Code4Fun!,

Manolo Herrera

No hay comentarios.: