C'è un modo per sapere in una classe di test JUnit 4, se la classe è stata avviata da una Test-Suite? Ho cose globali che voglio eseguire prima di tutti i test (per quanto riguarda il DB in memoria), quindi ho pensato di farlo nel test-suit. Tuttavia, voglio ancora essere in grado di avviare un test alla volta senza un Test-Suit, quindi ho bisogno di sapere se ho bisogno di inizializzare le cose globali nella parte @Before del test ... Qualcuno sa se è possibile ?Invocazione test: come eseguire l'impostazione comune a tutte le suite di test
risposta
Ci sono diversi modi per raggiungere questo obiettivo. Il modo più semplice e semplice è avere un 'test' che viene eseguito all'inizio e alla fine della suite che imposta il tuo database e quindi imposta una bandiera globale. Nei test @Before e @After si controlla questo flag e, se necessario, si esegue il setup/teardown.
@RunWith(Suite.class)
@SuiteClasses({SetupTest.class, RealTest.class, TeardownTest.class});
Questa è la soluzione più semplice, ma non è molto bello, quindi una soluzione più ordinato sarebbe quella di utilizzare un TestRule. Guarda estendere ExternalResource. Questo implementa prima dello & dopo la logica che circonda i metodi di test. Ciò ti consentirebbe di calcolare i metodi @Before e @After, per riutilizzare lo stesso codice ovunque.
Quindi, per la suite, è necessario implementare anche la logica prima/dopo. Sfortunatamente, la classe annotata con @RunWith (Suite.class) non è in realtà un'istanza, quindi non è possibile utilizzare il costruttore di quella classe, ma è possibile estendere Suite. A seconda di come verrà eseguito questo, sarà necessario implementare uno dei costruttori, utilizzando @RunWith come esempio:
public class MySuite extends Suite {
/**
* Called reflectively on classes annotated with <code>@RunWith(Suite.class)</code>
*
* @param klass the root class
* @param builder builds runners for classes in the suite
* @throws InitializationError
*/
public MySuite(Class<?> klass, RunnerBuilder builder) throws InitializationError {
this(builder, klass, getAnnotatedClasses(klass));
// put your global setup here
// set global variable
}
}
quindi eseguire il test suite con
@RunWith(MySuite.class)
Ci sono diversi costruttori che vengono utilizzati in situazioni diverse, guarda i commenti accanto a ciascuno per le specifiche. È ancora necessario utilizzare una variabile globale in modo che le regole non rieseguano il codice di configurazione. Quanto sopra funzionerà se si desidera eseguire solo il codice di configurazione, l'esecuzione del codice di rimozione è più difficile, ma può essere eseguita. Fammi sapere se ne hai bisogno :-)
Se desideri maggiore flessibilità (ad esempio l'esecuzione del codice di configurazione solo per metodi specifici), consulta la risposta allo How to define JUnit method rule in a suite?.
Vorrei utilizzare le annotazioni JUnit @BeforeClass e @AfterClass per indicare i metodi per eseguire questo tipo di lavoro.
Dal Javadoc @BeforeClass:
A volte diversi test hanno bisogno di condividere computazionalmente costoso configurazione (come la registrazione in un database). Mentre questo può compromettere l'indipendenza dei test da , a volte è un'ottimizzazione necessaria. Annotando un metodo no-arg statico pubblico vuoto con @BeforeClass, è necessario eseguire una volta prima di uno qualsiasi dei metodi di test nella classe. I metodi @BeforeClass di superclassi verranno eseguiti prima di quelli della classe corrente .
Questo è rilevante per diversi metodi @Test annotati all'interno di un file di classe di test, che non è lo scenario con cui ho a che fare, ne ho bisogno per diverse CLASSI di test. – stdcall
È possibile inserire del codice @BeforeClass
in ciascuna suite di test, che delega a una classe ausiliaria che esegue la configurazione comune. La classe ausiliaria potrebbe avere un static boolean
che registra se la configurazione è già stata eseguita. Se è già stato fatto, la classe ausiliaria non farebbe nulla.
- 1. Fitnesse: come eseguire test specifici su più suite di test
- 2. Gradle esegue solo una suite di test
- 3. Come posso eseguire localmente la suite di test archetypes.querywidget?
- 4. Impostazione Test Suite in Ruby
- 5. Come eseguire i test per tutte le mie app Django?
- 6. PhpSpec: come posso eseguire un solo test da una suite?
- 7. Come posso avere una suite di test comune per più pacchetti in go?
- 8. Test-suite Haskell Stack Ghci
- 9. Aggiunta di una suite di test aggiuntiva a Gradle
- 10. perl test suite per API
- 11. Escludere alcuni test JUnit dalla suite di test automatizzata
- 12. Copertura URL Django Test Suite
- 13. come aggiungere automaticamente dozzina di casi di test a una suite di test in python
- 14. Basta eseguire un test singolo invece dell'intera suite?
- 15. Come raggruppare le suite di test in gelsomino quando i test esistono in file diversi?
- 16. Come eseguire a livello di codice una suite di test utilizzando JUnit4?
- 17. Caso test selenio vs. Test Suite e utilizzo generale
- 18. NUnit non in esecuzione Suite test
- 19. Come impedire a SBT di eseguire test di integrazione?
- 20. come esportare la suite di test (JUnit) come jar eseguibile
- 21. Come si eseguono più test suite di goniometri contemporaneamente?
- 22. Node.js + mocha + webdriverjs: Test fallito kill suite
- 23. Come eseguire più suite di test PHPUnit dalla riga di comando?
- 24. Suite di prove Junit 4 e classi di test individuali
- 25. Come posso creare una suite di test JUnit4 configurabile?
- 26. Come disattivare la suite di test in ScalaTest
- 27. Esecuzione di una suite di test con oltre un milione di test
- 28. test tutte le combinazioni in Python
- 29. test per android espresso: suite di test vuota. Non sono stati trovati test
- 30. Test Suite in pallone con MongoEngine
La maggior parte dei link sono morti. – Nadar