Ho installato l'ultima versione di NUnit (3.2.0) e ho eseguito tutti i miei test in parallelo. Potrebbe sembrare un comportamento desiderabile ma non l'ho chiesto e in realtà ha rotto alcuni dei miei test. Ho un'inizializzazione in [OneTimeSetUp]
che dipende dal thread e sembra che non possa fare nulla per forzare NUnit a eseguire i miei test in modo sequenziale. Ho letto il documentation e afferma che per impostazione predefinita i test non vengono eseguiti in parallelo ma in realtà lo sono!NUnit 3: vietare test da eseguire in parallelo
Inoltre, ho provato ad aggiungere il seguente attributo: [assembly: Parallelizable(ParallelScope.None)]
- senza fortuna.
Qualcuno sa come modificare questo comportamento?
P.S. Lo eseguo con ReSharper ma ho anche provato con il componente aggiuntivo MSVS.
UPD: sto usando MVVM luce DispatcherHelper.Initialize()
(all'interno [OneTimeSetUp]
) per memorizzare l'oggetto dispatcher che viene poi utilizzata da un paio di test. Se i thread sono diversi (tra un test e il metodo di installazione), l'azione sotto test viene eseguita in modo asincrono e i miei test falliscono.
Ho controllato gli ID di thread in diversi test e sono tutti diversi.
UPD2: Estratto dalla documentazione:
Il 3.0 quadro NUnit in grado di eseguire test in parallelo all'interno di un assemblaggio. Questa è una funzione completamente separata dall'Engine Esecuzione test parallelo, sebbene sia possibile utilizzare entrambi nello stesso ciclo di prova dello .
Per impostazione predefinita, non viene eseguita l'esecuzione parallela. Gli attributi vengono utilizzati per indicare quali test possono essere eseguiti in parallelo e in che modo si riferiscono agli altri test .
Se ciò non significa che i test all'interno di un assieme non devono essere eseguiti in parallelo fino a quando non vengono specificati esplicitamente cosa significa? E perché [assembly: Parallelizable(ParallelScope.None)]
non ha alcun effetto sull'esecuzione parallela dei test?
UPD3: Risposta alla domanda potrebbe essere trovata al di sotto, ma se si sono bloccati (come mi è stato) con la DispatcherHelper.Initialize()
è sufficiente rimuovere questo l'inizializzazione dal OneTimeSetUp
e mettere le seguenti righe in ogni test che utilizza un dispatcher:
DispatcherHelper.Reset();
DispatcherHelper.Initialize();
I test potrebbero non essere eseguiti in parallelo, è probabile che siano in esecuzione in un thread diverso rispetto a OneTimeSetup. Stai memorizzando informazioni nella memoria locale del thread? –
Spiegare cosa intendi per "thread-dependent" Nulla in NUnit garantisce che i test vengano eseguiti sullo stesso thread – Charlie
@RobProuse, aggiornata la domanda – ixSci