2009-10-29 6 views
16

Devo scrivere una suite di test molto ampia per un insieme complesso di regole aziendali attualmente catturate in diverse forme tabulari (ad esempio, se i parametri X Y Z sono tali e tali, il valore deve essere compreso tra V1 e V2). Ogni regola ha un nome e la sua semantica.È possibile generare in modo programmatico casi di test e suite JUnit?

Il mio obiettivo finale è disporre di una suite di test, organizzata in sub suite di prova, con un caso di test per ogni regola.

Un'opzione è in realtà il codice rigido di tutte queste regole come test. È brutto, dispendioso in termini di tempo e inflessibile.

Un altro è scrivere uno script Python in grado di leggere i file delle regole e generare classi Java con i test delle unità. Preferirei evitare questo se posso. Un'altra variante sarebbe usare Jython.

Idealmente, tuttavia, mi piacerebbe avere una suite di test in grado di leggere i file e quindi definire sotto-suite e test al loro interno. Ognuno di questi test può essere inizializzato con determinati valori estratti dai file di tabella, eseguire punti di ingresso fissi nel nostro sistema e quindi chiamare una funzione di convalida sui risultati in base al valore previsto.

Esiste un modo ragionevole per eseguire questa operazione utilizzando solo Java?

Aggiornamento: Potrei aver semplificato un po 'il nostro tipo di regole. Alcuni di questi sono effettivamente tabulari (stile excel), altri sono più sfocati. La domanda generale però rimane come probabilmente non sono la prima persona ad avere questo problema.

+0

Molto interessato a scoprirlo; Ho bisogno di saperne di più sui casi di test. – I82Much

risposta

17

All'interno di JUnit 4 si desidera esaminare lo Parameterized runner. È stato creato per lo scopo che descrivi (test basati sui dati). Tuttavia, non li organizzerà in suite.

In Junit 3 è possibile creare TestSuites e test in modo programmatico. La risposta è Junit Recipes, che posso espandere se ne hai bisogno (ricorda che JUnit 4 può eseguire i test di Junit 3).

8

Avete considerato l'utilizzo di FIT per quello?

Sembra che le tabelle siano già pronte e le "regole aziendali" sembrano "gli uomini d'affari scrivono utilizzando Excel".

FIT è un sistema per il controllo di test basato su tabelle con input-> i mapping di output previsti e una libreria java open source per l'esecuzione di tali test è disponibile.

+0

Inoltre ci sono i driver Java per questo. –

+0

Questo è quello che stavo per dire; il tuo caso suona esattamente come il tipo di cosa che doveva essere risolta; raccomando fitnesse (http://fitnesse.org) in quanto è l'implementazione più aggiornata e attuale che riesca a pensare. – Kevlar

+0

Grazie. Conosco la FIT ma non avevo familiarità con le nuove implementazioni; Li controllerò. Tuttavia, mi chiedo se c'è un modo programmatico per rimanere all'interno di JUnit. – Uri

1

Abbiamo provato FIT e abbiamo deciso di utilizzare lo Concordion. I principali vantaggi di questa libreria sono:

  • le prove possono essere controllati a fianco della base di codice (in un repository Subversion, per esempio)
  • sono effettuate da un corridore JUnit norma
0

Ho scritto qualcosa di molto simile usando JUnit. Ho avuto un gran numero di casi di test (30 pagine) in un file XML. Invece di provare a generare test diversi, ho fatto tutto in un unico test, che ha funzionato bene.

La mia prova sembrava qualcosa di simile:

void setup() { 
    cases = read in the xml file 
} 

void test_fn_works() { 
    for case in cases { 
    assert(case.expected_result, fn(case.inputs), 
     'Case ' + case.inputs + ' should yield ' + case.expected_result); 

    } 
} 

con Ruby, ho fatto esattamente quello che sono i test di generazione saying-- al volo.Fare questo in Java, tuttavia, è complesso e non penso che ne valga la pena poiché esiste un altro approccio abbastanza ragionevole.

Spero che questo aiuti.

Problemi correlati