2009-04-13 6 views
9

Sto tentando di testare un progetto Silverlight 3. Sto usando:Test unitario con Moq, Silverlight e NUnit

Quando scrivo un test che non utilizza Moq, funziona come dovrebbe.

Quando uso il moq al di fuori di un test, Moq funziona come dovrebbe. (I beffata un'interfaccia e ha fatto un verifica in un gestore di pulsante come prova.)

Ma quando ho eseguito un test di unità che utilizza Moq, ho sempre arrivare questo:

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 

Come può essere fisso?


Ho rigenerato entrambi i gruppi per SL 3 con gli stessi risultati.

Sono riuscito a eseguire il test sul Framework test dell'unità Silverlight di Microsoft.

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

Questo è il quadro di prova in-browser sembra essere il modo standard per test di unità SL. I problemi sono:

  1. è necessario eseguire tutti i test in una volta
  2. è brutalmente lento.

    (~ 5 volte più lento rispetto allo stesso test in esecuzione nel contesto di prova NUnit)

Qualcuno sa di eventuali altri framework di test SL o un modo migliore per eseguire i test contro questo quadro?

Quando tento di usare TestDriven.Net 's vs plug ottengo un errore:

System.IO.FileNotFoundException: Impossibile caricare il file o l'assembly' del sistema, ...

risposta

0

suona come una Silverlight 3 problema. Puoi ottenere le fonti di Moq.Silverlight e NUnitSilverlight e costruirle su binari Silverlight 3? Sembra che questi sono costruiti con SL 2.

4

Ho creato uno strumento per l'utilizzo con integrazione continua e per accelerare il TDD Silverlight generale ...

http://www.StatLight.net

Ora ha il pieno supporto per qualsiasi versione di NUnit compilata per l'esecuzione con Silverlight.

1

Ciò che ha funzionato per me è assicurarsi che la proprietà 'Copia locale' (nella griglia di proprietà IDE (F4) del sistema di riferimento) sia impostata su true.

9

Grazie alle informazioni fornite da Lee, e il collegamento ha fornito (http://weblogs.asp.net/nunitaddin/archive/2008/05/01/silverlight-nunit-projects.aspx) sono stato in grado di ottenere il mio test Silverlight NUnit esecuzione in Hudson con copertura di codice! Cose fantastiche hey! E corrono anche con ReSharper, quindi non mi sento come se fossi più punito (con un ritardo di 20 secondi) per fare TDD in Silverlight.

Quindi, cosa ho fatto esattamente?

  • Ho fatto un progetto Silverlight Unità quadro di prova per la SL3:

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

  • poi ho cambiato tutte le esigenze degli riferimenti (ad eccezione di 'Silverlight assemblee del progetto di prova mscorlib') per 'Copia locale: true' come dettagliato in:

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

  • Il Ho aggiunto riferimenti al framework Silverlight NUnit 2.5.1 fornito nel seguente blog (ci sono altre versioni fornite da Jeff Willcox nel blog che menziono qui sotto e Jamie Cansdale nel suo blog qui sopra, ma questa era l'ultima versione che ho trovato):

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

  • Questo è tutto! Dopo di ciò, ho potuto scrivere i miei test, eseguirli in ReSharper e dal corridore di test NUnit! Inoltre, potrei usare ncover per ottenere rapporti sulla copertura !!!

  • MODIFICA: Sì, e se si eseguono test che richiedono il thread dell'interfaccia utente, si otterrà un errore di cross thread in ReSharper. Questo problema viene risolto eseguendo tali test all'interno di una chiamata Deployment.Current.Dispatcher.BeginInvoke(...).

  • Dopo aver utilizzato l'unità per i miei test, non è stato possibile eseguirli dall'interfaccia Web di SL Test Framework, ma non era un problema per me. Se si ha bisogno di ottenere questo lavoro, allora dare un'occhiata a:

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

  • PS: ho anche creato un progetto NUnit per la console corridore NUnit per eseguire il mio test dalla console NUnit (non prova a includere i tuoi assembly di test non SL nello stesso progetto NUnit, non funzionerà perché utilizza una diversa libreria nunit.framework).

Ho anche provato StatLight (http://statlight.codeplex.com/) per eseguire i test dalla console, e che ha funzionato bene per me, ma io sono un fan di ReSharper e NUnit, in modo che non era l'opzione migliore per me. C'era anche un bizzarro bug con StatLight in cui non stava caricando correttamente le risorse del mio progetto di test, il che ha portato ad alcuni errori di test.

Spero che questo aiuti qualcuno.Non ho inventato nulla di nuovo qui, ma ho semplicemente consolidato tutte le informazioni che vorrei che qualcuno mi avesse sintetizzato per me. Quando avrò tempo, parlerò di questo in termini di creazione di un progetto Habanero framework (http://www.habanerolabs.com) con SilverLight.

Whew. È tutto gente!

+0

grazie mille uomo –

+0

@MarkWhitfeld c'è un modo per mostrare i risultati nella finestra nativa di Test Explorer? – Jay

+0

Non sono sicuro @jay, non ho fatto un progetto Silverlight negli ultimi 4 anni. Molto potrebbe essere cambiato da allora. –