2014-12-08 18 views
13

Per quanto ho capito, TestExecutionListeners si comporta come i metodi @BeforeClass in JUnit. Quello che non capisco è il motivo per cui ho bisogno di utilizzare DependencyInjectionTestExecutionListener, TransactionalTestExecutionListener e DirtiesContextTestExecutionListener per utilizzare DbUnitTestExecutionListener.Cosa sono TestExecutionListeners e cosa fanno?

Normalmente senza DbUnit, posso creare e popolare il database. Perché improvvisamente ho bisogno di usare questi ascoltatori per fare un po 'di CRUD per il mio database?

risposta

22

TestExecutionListeners forniscono vari tipi di funzionalità ai test eseguiti in Spring TestContext Framework.

Se sei interessato a ciò che fa un particolare ascoltatore, il modo migliore per scoprirlo è leggere il Javadoc per la classe corrispondente. Inoltre, lo Testing chapter del manuale di riferimento Spring descrive in dettaglio come utilizzare ciascuno degli ascoltatori e cosa fanno.

Nel caso specifico, se non si utilizza @DirtiesContext, non è necessario utilizzare DirtiesContextTestExecutionListener. Per quanto riguarda DependencyInjectionTestExecutionListener e TransactionalTestExecutionListener, è probabile che siano necessari per iniettare dipendenze nel test (ad esempio, tramite @Autowired, @Inject, @Resource, ecc.) E per i test transazionali (ad esempio, i test annotati con @Transactional).

Nota anche che gli ascoltatori di cui sopra sono abilitati di default. Quindi, se hai utilizzato Spring TestContext Framework senza nessun listener personalizzato come quello per DbUnit, allora non hai mai realizzato che esistessero gli ascoltatori. Anche la sezione su TestExecutionListener configuration nel manuale di riferimento dovrebbe aiutare a chiarire le cose. Si noti, tuttavia, che alcune funzionalità come la fusione e il rilevamento automatico dei listener predefiniti sono disponibili solo in Spring Framework 4.1+.

saluti,

Sam (autore del TestContext Spring Framework)