Pregunta

Estamos usando Moles para probar algunos de nuestro código heredado. Actualmente, todas las pruebas de nuestra unidad pasan cuando se ejecutan localmente utilizando el corredor de prueba de Mstest o Resharper. Sin embargo, cuando se ejecuta en el servidor de compilación (usamos un flujo de trabajo TFS 2010 ligeramente modificado, usando MSBUILD y MSTest), todas las pruebas de nuestros moles fallan.

Cuando miré en la causa, se debió a que cuando se generaron .moles.dll se generaron en el servidor de compilación, solo se crearon los talones (clases prefijadas con "s"), pero ninguna de las clases de moles (clases prefijadas por "m ").

Nuestro código aún compila porque uno de nuestros desarrolladores creó un marco para que los lunares simplifiquen la sintaxis, que utiliza expresiones y delegados para hacer que el trabajo con lunares se sientan como trabajar con MOQ. El marco utiliza la reflexión para obtener la versión de los moles de los métodos, ya que se crean las clases "M", lanza una nullReferenceException al intentar obtener el método porque la llamada a ensamblaje.gettype devuelve NULL.

Editar: la última versión de la biblioteca PEX & MOLES se instala en el servidor de compilación.

Editar edición 2: Aquí está la línea de comando que está en el registro MSBUILD

"C:\Program Files (x86)\Microsoft Moles\bin\moles.exe" @"D:\Builds\4\DeltaNet\Run All Unit Tests\Sources\DeltaNet\src\DeltaNetTests\obj\Debug\Moles\moles.args"

y los contenidos de "moles.args"

Common.Logging.moles;DeltaNetUtils.moles;System.configuration.moles /molesfilesonly /referenceassemblies:"<lots-of-dll-files>" /cachepath:"C:\Program Files (x86)\Microsoft Moles\bin\..\MolesAssemblies" /intermediatepath:"D:\Builds\4\DeltaNet\Run All Unit Tests\Sources\DeltaNet\src\DeltaNetTests\obj\Debug\Moles" /outputpath:"D:\Builds\4\DeltaNet\Run All Unit Tests\Sources\DeltaNet\src\DeltaNetTests\MolesAssemblies" /clrversion:v4.0.30319 /targetframeworkversion:v4.0

¿Fue útil?

Solución

Entonces, tuve otra mirada a esto hoy y creo que se me ocurrió el problema y fue deprimentemente simple.

Estaba usando lunares en 2 proyectos de prueba diferentes y en uno de ellos especificé exactamente qué clases quería los lunares para usar el archivo XML assembly.moles.Este debe haber sido compilado después de la que tiene la mayor parte de mis pruebas y, por lo tanto, sobrescribirla en el directorio de los binarios.

Aceptamos los detalles de ese archivo y ahora parece que mis pruebas están pasando y se están creando los tipos MXXX.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top