2011-12-13 8 views
9

Ho un'applicazione scala con alcuni test utilizzando org.scalatest. Questi test necessitano di alcune impostazioni globali (e di eliminazione), al fine di gestire il database di test.org.scalatest: impostazione globale (come beforeAllSuites?)

Per favore non mi dica il mio test non dovrebbero colpire il database e dovrei farlo Java-DAO-Stub-WTF-Overkill-Way ™ :-).

sto correndo i test utilizzando SBT, che fornisce un modo per eseguire codice prima e dopo il test:

testOptions in Test += Tests.Setup(() => println("Setup")) 

    testOptions in Test += Tests.Cleanup(() => println("Cleanup")) 

purtroppo non posso accedere alle classi in questione là. Non sorprendentemente, importarli in build.sbt non funziona neanche.

Qualche idea?

+0

Avevo un obiettivo molto simile e ho trovato una soluzione. Controlla questa domanda: http://stackoverflow.com/questions/27272811/how-to-cut-a-long-scalatest-spec-to-pieces/27275814 Volevo mantenere anche il passo di inizializzazione come una classe di test. – akauppi

risposta

4

È possibile utilizzare i tratti BeforeAndAfterAll o BeforeAndAfter, in base alle proprie esigenze.

BeforeAndAfterAll:

Trait che può essere miscelato in suite che hanno bisogno di metodi invocati prima e dopo l'esecuzione della suite. Questo tratto consente di eseguire il codice prima e/o dopo che tutti i test e le suite nidificate di una suite sono eseguiti .

Quindi in questo caso, si definirà una MasterSuite che contiene tutte le altre Suite/Test, che estende questa caratteristica.

BeforeAndAfter:

Trait che può essere miscelato in suite che necessitano di codice eseguito prima e dopo l'esecuzione ogni test. Questa caratteristica facilita uno stile di test in quali oggetti di fixable mutabili contenuti nelle variabili di istanza vengono sostituiti o reinizializzati prima di ogni test o suite.

+3

Definire una MasterSuite significherebbe che tutti i miei test dovevano essere definiti in un singolo file, giusto? Per ora, ho separato tutti i test dipendenti dal database in una suite e uso BeforeAndAfterAll lì. Questo ha anche il vantaggio di poter saltare facilmente questo lento test. –

+3

Anni dopo, ma ancora rilevante per chiunque trovi la domanda: non è necessario definire tutti i test in un singolo file, ScalaTest ha funzionalità di composizione in cui è possibile utilizzare 'classe MasterSuite estende Suites (nuovo OneSpec, nuovo TwoSpec)' in modo che le suite composte devono semplicemente trovarsi sul classpath (il 'BeforeAndAfterAll''s Scaladoc ne ha un esempio, quindi è facile da ricordare). Poiché 2.0 ScalaTest ha l'annotazione '@ DoNotDiscover' in modo da poter fermare SBT (o qualsiasi altro supporto di supporto) dall'esecuzione di tutte le suite composte, solo il master. – ches

+0

In realtà l'autore lo descrive bene qui: http://stackoverflow.com/questions/15423337/doing-something-before-or-after-all-scalatest-tests – ches

Problemi correlati