2009-04-13 43 views
9

Estoy intentando probar la unidad de un proyecto de Silverlight 3. Estoy usando:Pruebas unitarias con Moq, Silverlight y NUnit

Cuando escribo una prueba de que no utiliza Moq, funciona como debería.

Cuando uso Moq fuera de una prueba, Moq funciona como debería. (I burlado de una interfaz y realizó un verificar en un controlador de botón como una prueba.)

Pero cuando corro una prueba de unidad que utiliza Moq, siempre me sale esto:

System.IO.FileNotFoundException: Could not load file or assembly 'System, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e' or one of its dependencies. The system cannot find the file specified. 
at Moq.ExpressionExtensions.ToStringFixVisitor..ctor(Expression expression) 
at Moq.Interceptor.AddCall(IProxyCall call, SetupKind kind) in c:\Build\Moq Drop\moq\WorkingDirectory\trunk\Source\Interceptor.cs: line 104 
at Moq.Mock.<>c__DisplayClassc`2.<Setup>b__b() in c:\Build\Moq Drop\moq\WorkingDirectory\trunk\Source\Mock.cs: line 387 
at Moq.PexProtector.Invoke<T>(Func`1 function) in c:\Build\Moq Drop\moq\WorkingDirectory\trunk\Source\PexProtector.cs: line 17 
at Moq.Mock.Setup<T1,TResult>(Mock mock, Expression`1 expression) in c:\Build\Moq Drop\moq\WorkingDirectory\trunk\Source\Mock.cs: line 371 
at Moq.Mock`1.Setup<TResult>(Expression`1 expression) in c:\Build\Moq Drop\moq\WorkingDirectory\trunk\Source\Mock.Generic.cs: line 194 
at SilverlightMoq.Test1.TestFirst() in Test1.cs: line 23 

¿Cómo puede ser ¿fijo?


Reconstruí ambos conjuntos para SL 3 con los mismos resultados.

Pude ejecutar la prueba en el marco de prueba de la unidad de Microsoft Silverlight.

http://code.msdn.microsoft.com/silverlightut/

Este es el marco de pruebas en el navegador que parece ser la forma estándar de prueba de la unidad SL. Los problemas son:

  1. debe ejecutar todas las pruebas a la vez
  2. es brutalmente lento.

    (~ 5 veces más lento que las mismas pruebas que se ejecutan en el marco de pruebas nunit)

¿Alguien sabe de cualquier otro tipo de prueba marcos SL o una mejor manera de ejecutar las pruebas en contra de este marco?

Cuando intento utilizar TestDriven.Net 's vs plug-in Me aparece un error:

System.IO.FileNotFoundException: No se pudo cargar el archivo o ensamblado' del sistema, ...

Respuesta

0

suena como una Silverlight 3 problema. ¿Puedes obtener las fuentes de Moq.Silverlight y NUnitSilverlight y compilarlas en Silverlight 3 binarios? Parece que estos se construyen con SL 2.

4

Creé una herramienta para usar con integración continua y para acelerar el TDD general de Silverlight ...

http://www.StatLight.net

Ahora tiene soporte completo para cualquier versión de NUnit compilado para ejecutarse en Silverlight.

1

Lo que funcionó para mí es asegurarme de que la propiedad 'Copiar local' (en la cuadrícula de propiedad IDE (F4) del sistema de referencia) está establecida en verdadero.

9

Gracias a la información proporcionada por Lee, y el enlace que proporciona (http://weblogs.asp.net/nunitaddin/archive/2008/05/01/silverlight-nunit-projects.aspx) pude tener en mis pruebas Silverlight NUnit se ejecuta en Hudson con cobertura de código! Cosas increíbles, oye! Y también funcionan con ReSharper, así que ya no me siento castigado (con un retraso de 20 segundos) por hacer TDD en Silverlight.

Entonces, ¿qué hice exactamente?

  • hice un proyecto de marco de pruebas unitarias Silverlight para SL3:

    (http://www.jeff.wilcox.name/2010/05/sl3-utf-bits/)

  • Entonces cambió todo referencias (excepto 'asambleas de Silverlight del proyecto de prueba mscorlib') a 'Copiar local: True' como se detalla en:

    (http://weblogs.asp.net/nunitaddin/archive/2008/05/01/silverlight-nunit-projects.aspx)

  • El n Agregué referencias al marco de Silverlight NUnit 2.5.1 proporcionado en el siguiente blog (hay otras versiones proporcionadas por Jeff Willcox en el blog que menciono a continuación y Jamie Cansdale en su blog anterior, pero esta fue la última versión que encontré):

    (http://wesmcclure.tumblr.com/post/152727000)

  • eso es todo! Después de eso, pude escribir mis pruebas, ejecutarlas en ReSharper y en el corredor de pruebas de NUnit. Además, podría usar ncover para obtener informes de cobertura.

  • EDITAR: Ah sí, y si ejecuta alguna prueba que requiera el hilo de interfaz de usuario, obtendrá un error de cruce de hilos en ReSharper. Esto se resuelve ejecutando esas pruebas dentro de una llamada Deployment.Current.Dispatcher.BeginInvoke(...).

  • Después de usar la unidad para mis pruebas no pude ejecutarlas desde la interfaz web de SL Test Framework, pero eso no fue un problema para mí. Si es necesario para conseguir este trabajo a continuación, echar un vistazo a:

    (http://www.jeff.wilcox.name/2009/01/nunit-and-silverlight/)

  • PD: yo también he creado un proyecto NUnit para el corredor de la consola NUnit para ejecutar mis pruebas de la consola NUnit (NO intente incluir sus ensamblajes de prueba que no sean SL en el mismo proyecto NUnit, no funcionará porque usa una biblioteca nunit.framework diferente).

También probé StatLight (http://statlight.codeplex.com/) para ejecutar las pruebas de la consola, y que ha funcionado bien para mí, pero yo soy un ReSharper y ventilador NUnit, así que no era la mejor opción para mí. También hubo un error extraño con StatLight en el que no estaba cargando correctamente los recursos de mi proyecto de prueba, lo que dio como resultado algunas fallas de prueba.

Espero que esto ayude a alguien.No he encontrado nada nuevo aquí, sino que simplemente he consolidado toda la información que desearía que alguien me hubiera resumido por adelantado. Cuando tenga algo de tiempo, bloguearé sobre esto en términos de crear un proyecto de marco Habanero (http://www.habanerolabs.com) con SilverLight.

Whew. ¡Eso es todo amigos!

+0

muchas gracias, hombre –

+0

@MarkWhitfeld ¿hay alguna forma de mostrar resultados en la ventana nativa de Test Explorer? – Jay

+0

No estoy seguro @jay, no he hecho un proyecto Silverlight en los últimos 4 años. Mucho podría haber cambiado desde entonces. –