Oltre alla risposta @Nicolas_Filotto, è anche possibile utilizzare Junit Theories. È più leggibile e, a differenza di Parameterized
, eseguirà il test con tutte le possibili combinazioni di parametri.
@RunWith(Theories.class)
public class MyTest {
@DataPoints("cols")
public static int[] rowValues(){
return new int[]{0, -1, 1, 2};
}
@DataPoints("rows")
public static int[] colValues(){
return new int[]{0, -1, 4, 5};
}
@Theory
public void upperBoundIsChecked(@FromDataPoints("cols") int col,
@FromDataPoints("rows") int row){
assumeTrue(row >= ROWS || col >= COLS);
try {
check(col, row);
fail("Should have thrown IllegalArgumentException");
} catch (IllegalArgumentException ignore){}
}
@Theory
public void lowerBoundIsChecked(@FromDataPoints("cols") int col,
@FromDataPoints("rows") int row){
assumeTrue(row < 0 || col < 0);
try {
check(col, row);
fail("Should have thrown IllegalArgumentException");
} catch (IllegalArgumentException ignore){}
}
@Theory
public void validIndicesNoException(@FromDataPoints("cols") int col,
@FromDataPoints("rows") int row){
assumeTrue(row >= 0 && col >= 0 && row < ROWS && col < COLS);
try {
check(col, row);
} catch (Exception e){
fail("Should not have thrown an exception: " + e.getMessage());
}
}
}
Ogni teoria controlla tutte le possibili combinazioni di righe e colonne che corrispondono alle ipotesi della teoria.
Oppure, se l'elenco dei colli e delle righe sono gli stessi, si potrebbe fare ancora più semplice:
@RunWith(Theories.class)
public class MyTest {
@DataPoints
public static int[] values(){
return new int[]{0, -1};
}
@Theory
public void validateIndices(int col, int row){
check(col,row);
}
}
fonte
2016-06-01 12:35:05
Come la maggior parte tutorial di base di test di unità dicono: prova di una condizione per ogni metodo di prova. Quindi avete bisogno di almeno quattro per le vostre quattro chiamate 'check'. – Tom
@Tom non sarebbe molto duplicato ripeterlo quattro volte? – jam
* "non sarebbe molto duplicato ripeterlo quattro volte?" * E allora? Tocca a voi.O vuoi un metodo 'validateIndices' fallito e devi controllare manualmente quale di queste chiamate ha fallito, hai metodi dedicati come' testCheck_invalidSecondArgument', quindi vedrai esattamente quale fallire. – Tom