Groovy - Test unitario
L'unità fondamentale di un sistema orientato agli oggetti è la classe. Pertanto il test unitario consiste nel testare all'interno di una classe. L'approccio adottato consiste nel creare un oggetto della classe in prova e utilizzarlo per verificare che i metodi selezionati vengano eseguiti come previsto. Non tutti i metodi possono essere testati, poiché non è sempre pratico testare ogni cosa. Ma i test unitari dovrebbero essere condotti per metodi chiave e critici.
JUnit è un framework di test open source che è lo standard industriale accettato per il test di unità automatizzato del codice Java. Fortunatamente, il framework JUnit può essere facilmente utilizzato per testare le classi Groovy. Tutto ciò che serve è estendere la classe GroovyTestCase che fa parte dell'ambiente Groovy standard. La classe del test case Groovy si basa sul test case Junit.
Scrivere un semplice test case Junit
Supponiamo di avere la seguente classe definita in un file di classe dell'applicazione:
class Example {
static void main(String[] args) {
Student mst = new Student();
mst.name = "Joe";
mst.ID = 1;
println(mst.Display())
}
}
public class Student {
String name;
int ID;
String Display() {
return name +ID;
}
}
L'output del programma di cui sopra è fornito di seguito.
Joe1
E ora supponiamo di voler scrivere un test case per la classe Student. Un tipico caso di test sarebbe simile a quello qui sotto. I seguenti punti devono essere annotati riguardo al codice seguente:
- La classe del test case estende la classe GroovyTestCase
- Stiamo utilizzando l'istruzione assert per garantire che il metodo Display restituisca la stringa corretta.
class StudentTest extends GroovyTestCase {
void testDisplay() {
def stud = new Student(name : 'Joe', ID : '1')
def expected = 'Joe1'
assertToString(stud.Display(), expected)
}
}
La suite di test Groovy
Normalmente con l'aumentare del numero di unit test, diventerebbe difficile continuare a eseguire tutti i casi di test uno per uno. Quindi Groovy fornisce una struttura per creare una suite di test in grado di incapsulare tutti i casi di test in un'unica unità logica. Il codenippet seguente mostra come questo può essere ottenuto. Le seguenti cose dovrebbero essere annotate sul codice:
GroovyTestSuite viene utilizzato per incapsulare tutti i casi di test in uno solo.
Nell'esempio seguente, supponiamo di avere due file di test case, uno chiamato StudentTest e l'altro è EmployeeTest che contiene tutti i test necessari.
import groovy.util.GroovyTestSuite
import junit.framework.Test
import junit.textui.TestRunner
class AllTests {
static Test suite() {
def allTests = new GroovyTestSuite()
allTests.addTestSuite(StudentTest.class)
allTests.addTestSuite(EmployeeTest.class)
return allTests
}
}
TestRunner.run(AllTests.suite())