2010-04-23 11 views
12

Data la domanda 'How to run all tests belonging to a certain Category?' and the answer il seguente approccio sarebbe migliore per l'organizzazione del test?La nuova suite di test di rendering JUnit 4.8.1 @Category è quasi obsoleta?

  1. definiscono suite di test master che contiene tutti i test (ad esempio utilizzando ClasspathSuite)
  2. progettazione sufficiente serie di categorie JUnit (sufficienti significa che ogni collezione desiderabile di test è identificabile da una o più categorie)
  3. qualificarsi ogni test con relativa categoria (ies)
  4. define mirati suite di test basati su suite di test di master e insieme di categorie

Esempio:

  • identificare le categorie di velocità (lento, veloce), le dipendenze (finto, di database, integrazione, ecc), la funzione (riempimento in categorie applicabili), dominio (riempimento in categorie applicabili), ecc
  • richiede che ciascun test sia adeguatamente qualificato (taggato) con le relative serie di categorie.
  • creare suite di test master utilizzando ClasspathSuite (tutti i test trovati nel classpath)
  • creare suite di destinazione per suite di test master qualificante con categorie, ad es. suite di test di simulazione, suite di test di database veloce, lento integrazione per la suite di test dominio X, ecc

La mia domanda è più simile a sollecitare tasso di approvazione per tale approccio vs. classico approccio suite di test. Un vantaggio imbattibile è che ogni nuovo test è immediatamente contenuto da suite pertinenti senza manutenzione della suite. Uno riguarda è la categorizzazione corretta di ogni test.

+0

aggiunto post di blog: http://novyden.blogspot.com/2011/06/using-junit-4-categories-to-replace.html – topchef

+0

Direi ** sì **. Ma poi non ho mai veramente capito le tradizionali suite JUnit. :) Tale seccatura che mantiene le informazioni sulle categorie in un luogo separato! Se non fosse stato per le nuove @Categories & ClasspathSuite, preferirei comunque semplici [naming patterns] (http://stackoverflow.com/questions/6202579/can-ant-categorise-junit-tests-based-on- eredità-gerarchia/6280134 # 6280134). +1 per sollevare una buona domanda. – Jonik

+1

@Jonik - grazie. L'approccio al naming pattern è decisamente un trucco rispetto ai test. E come tale non è molto flessibile in quanto non consente di combinare i test in suite diverse in base a più categorie. Mi piace anche pensare al nome del test che riflette il suo scopo, non le sue proprietà. – topchef

risposta

7

Uno dei compromessi da considerare è IMHO che le categorie sono definite all'interno dei test e le suite sono definite all'esterno. Ciò significa che quando si usano le suite, si conoscono i test che verranno eseguiti, ma quando si usano le categorie, non si sa a meno che non si ispezionino i test o li si esegua semplicemente. Allo stesso tempo, quando guardi il test usando le suite di test non sai in quale suite è contenuto, a meno che non controlli le tue suite, ma usando le categorie, lo vedi immidamente.

+0

punto valido. Dipende da quanto sia importante un modo di controllare i test o l'altro per una squadra. Posso aspettarmi che con l'abbraccio delle categorie, le priorità cambino. Le categorie IMHO si adattano meglio al test di annotazione/unità dichiarative. – topchef

+0

Il problema con le categorie, anche se mi piacciono anche loro, è che sono un livello meta alto rispetto ai test e quindi perdi alcune informazioni. Per presentare questo punto, immagina di avere molte categorie e un errore di battitura - non lo troverai (AFAIK).Con Suites hai il controllo di tipo per assicurarti di aver usato nomi validi. Direi che questo è un problema che può essere generalizzato nella discussione JUnit3 vs JUnit4. 4 è più potente, ma è più lontano dal linguaggio attuale (perché le annotazioni sono solo metadati, non metaprogrammazione) e 3 anche se non così flessibile, è (in senso relativo) solo un altro codice Java. Le annotazioni –

+0

sono metadati che hanno reso la programmazione dichiarativa in molti casi ... Sono d'accordo che bisogna sempre trovare il giusto equilibrio quando li si usa. Se pensi a questo test, le suite sono un livello superiore rispetto ai test: non portano nuovi test, ma li organizzano semplicemente in base a obiettivi e priorità. Questo dovrebbe essere il motivo per cui JUnit 4 ha trasferito le suite all'annotazione corretta. – topchef

Problemi correlati