Escher ha scritto:
- JUnit processa la classe "Parameterized.class" (nel mio caso "test") ed identifica i test da eseguire.
- Per ogni test, JUnit invoca il costruttore con quei parametri e crea una nuova istanza. Il numero di parametri della classe "Parameterized" (la mia "test") deve essere uguale ai parametri accettati dal costruttore.
- Infine JUnit valida il caso di test attraverso la classe Assert.
Può andare come spiegazione?
Sì, è corretto, è proprio una
feature di JUnit. La classe di test è
sempre JUnit che la istanzia. Generalmenre/normalmente JUnit si aspetta un costruttore
no-arg (senza argomenti), perché chiaramente non saprebbe certo cosa passare.
Se però la classe è annotata con @RunWith(Parameterized.class), allora per JUnit è una classe di test "parametrizzata". JUnit quindi si aspetta che ci sia un metodo
static annotato con @Parameters da cui prendere i parametri.
JUnit crea sempre una nuova istanza per ciascun metodo di test da eseguire. Con la parametrizzazione vuol dire che ciascun metodo di test verrà eseguito più volte, ogni volta con una tupla diversa di parametri.
Guarda il primo esempio alla pagina linkata. Il metodo da testare è quel Fibonacci.compute(), che riceve un int e restituisce un int.
Il senso di quel:
new Object[][] {
{ 0, 0 }, { 1, 1 }, { 2, 1 }, { 3, 2 }, { 4, 3 }, { 5, 5 }, { 6, 8 }
}
è relativo al costruttore
public FibonacciTest(int input, int expected)
JUnit prende ciascuna tupla {0,0} ... poi {1,1} e di volta in volta istanzia la classe con questi parametri.
quindi vorrà dire che:
- test() verrà invocato per avere input 0 ed aspettarsi 0
- test() verrà invocato per avere input 1 ed aspettarsi 1
- test() verrà invocato per avere input 2 ed aspettarsi 1
ecc... secondo l'array.