2014-10-23 20 views
5

Abbiamo un progetto di test NUnit con 1000 test circa. Il progetto contiene test dei componenti di alto livello principalmente per un controllo WPF personalizzato. Il processo di test fallisce di frequente sul nostro server build (TeamCity) con:Il processo di test NUnit fallisce spesso con i controlli WPF

InvalidOperationException "stoccaggio LocalDataStoreSlot è stato liberato"

mscorlib.dll System.LocalDataStore.GetData (slot System.LocalDataStoreSlot)

mscorlib! .dll! System.Threading.Thread.GetData (slot System.LocalDataStoreSlot)

WindowsBase.dll! System.Windows.Interop.ComponentDispatcher.CurrentThreadData.get() ...

I test contengono gli attributi [RequiresSTA], Window.Show(), le operazioni di Dispatcher ecc ... quindi non è sicuramente un normale progetto di test unitario.

L'errore sembra totalmente casuale, abbiamo revisioni in cui si verifica con l'80% di possibilità, tuttavia il più delle volte non si verifica affatto. In modo assolutamente misterioso, a volte semplici cambiamenti nel codice di produzione, come gli stili di modifica nel codice xaml, attivano i guasti, quindi il successivo cambiamento nel codice di produzione lo corregge.

Questo errore casuale simile a volte rende il nostro team di sviluppatori piuttosto sconvolto a volte, il nostro sistema di build esteso è ostacolato seriamente da questo errore.

Molto raramente è possibile riprodurlo localmente eseguendo il progetto con nunit-console.exe.

Avete mai visto un simile errore nel test? Qualche suggerimento su come risolvere questo problema sarebbe molto apprezzato.

Grazie

+0

Abbiamo lo stesso problema sui nostri server di compilazione, ma utilizzando Jenkins. Quasi mai visto localmente su macchine dev. Facciamo anche molti test su roba WPF che non sono in realtà test unitari. Per un po 'la teoria è stata che questo problema è sorto con i dispatcher non terminati che facevano cose strane, ma ora sembra che ce l'abbiano anche quando si uccide correttamente qualsiasi dispatcher avviato. Sei riuscito a risolvere questo? Qualche aggiornamento? – Niclas

+0

ci stiamo ancora lottando. Nessuna soluzione ancora. – pappati

risposta

1

abbiamo incontrato esattamente lo stesso problema nel nostro ambiente (Jenkins, Windows 8, NUnit 2.6.3).

Queste misure lo hanno risolto per noi.

  1. Assicurarsi che NUnit non funzioni con .NET 3.5 o versioni precedenti. Questo post spiega come.
  2. È possibile aggirare l'arresto NUnit all'arresto utilizzando l'opzione di riga di comando NUnit runner /nothread. Se si utilizza MS Build Community Tasks, è necessario impostare l'attributo TestInNewThread dell'attività NUnit su false.

Alcune informazioni di base sulla natura del crash possono essere trovate in questo MSDN forum thread. Alla fine questo deve essere risolto in NUnit.