2013-09-05 13 views
9

Recentemente ho iniziato a utilizzare NUnit per eseguire test di integrazione per il mio progetto. È un ottimo strumento, ma ho trovato uno svantaggio a cui non riesco a dare la risposta. Tutti i miei test di integrazione utilizzano l'attributo TestCaseSource e specificano il nome sorgente del caso di test per ciascun test. Ora il problema è che la preparazione di queste fonti di test richiede un po 'di tempo (~ 1 min.) E se sto eseguendo un singolo test, NUnit carica sempre OGNI SINGOLO fonte di test case, anche se non è una fonte di test per il test che sto correndoNUnit: carica TUTTI i TestCaseSources anche se non sono richiesti dal test corrente

È possibile modificare questo comportamento in modo che vengano caricate solo le origini del caso di test per il test? Voglio evitare di creare nuovi assembly ogni volta che voglio creare un nuovo test (sembra piuttosto superfluo e ingombrante, per non dire difficile da mantenere), dal momento che ho letto che i test in diversi assembly sono caricati separatamente, ma non lo faccio so delle fonti del caso di test. Vale la pena ricordare che sto usando Resharper come runner di test.

TL; DR: È necessario indicare a NUnit di caricare solo le origini TestCase necessarie per i test in esecuzione nella sessione corrente. Il comportamento corrente è che TUTTE TestCaseSources vengono caricati per qualsiasi test eseguito.

+0

Puoi fornire del codice che mostri il comportamento corrente? –

+0

Certo, modificherò la domanda originale a breve e aggiungerò il codice che sto usando. – Anshul

+0

Questo dimostra il comportamento per me - esecuzione di ReSharper 6 su VS2013. Mi scuso per la formattazione - non volevo postarla come risposta non-risposta. Anche se non sto eseguendo 'TestWhichIAmNotRunning', ReSharper valuterà' InfiniteValues', che restituirà '1' (quasi) per sempre. - - - - - 'public static IEnumerable InfiniteValues ​​{get {while (DateTime.Now! = DateTime.MinValue) yield return 1; }} [Test, TestCaseSource ("InfiniteValues")] public void TestWhichIAmNotRunning (int value) {} ' –

risposta

1

È possibile eseguire questa operazione spostando l'istanza delle sorgenti su un metodo di supporto e chiamandole nei metodi di installazione per ogni serie di test? Nella mia suite di test di integrazione ho spesso un set di metodi di supporto che configurano dati condivisi per diversi test. Io chiamo solo i metodi di aiuto che mi servono per la suite corrente nel [Setup]

+0

Si potrebbe fare ciò, ma come si usa l'attributo TestCaseSource per assegnare le origini del test case ai metodi? Stavo puntando a utilizzare l'attributo TestCaseSource perché si occupa dell'array di oggetti per la conversione di array di parametri e rende il test più modulare. – Anshul

+0

Sembra una buona idea, ma non funzionerà con l'attributo sorgente TestCase. Ho anche provato a trasferirlo al costruttore della classe di test, ma sembra che TestCaseSource venga valutato molto presto. Questo è un vero problema per i test di integrazione che utilizzano TestCaseSources che mappano dal database. –