Testes parametrizados com JUnit
Muitas vezes temos a necessidade de executar um mesmo teste repetidas vezes mudando apenas alguns parâmetros. A solução mais simples caso sejam poucos testes é replicar o método de testes e mudar as variáveis, ou então criar um método com as asserções desejadas e chamá-lo com os diferentes parâmetros.
Ambas as possibilidades apresentadas pecam, pois não respeitam o princípio DRY. Uma solução muito mais elegante é usar os testes parametrizados, uma possibilidade que para quem usa JUnit existe a partir da versão 4.
O funcionamento é simples: um método no teste, anotado com Parameters, deve retornar uma coleção de arrays, que serão os parâmetros de execução:
@Parameters
public static Collection<Object[]> parameters() {
List<Object[]> list = new ArrayList<Object[]>();
list.add(new Object[] {"asshole!", "jerk!"});
list.add(new Object[] {"what the hell?", "what the heck?"});
return list;
}
Cada array desta coleção fornecerá os argumentos para o construtor do teste, possibilitando assim que estes valores sejam salvos em campos da classe, e utilizados por quem precisar dos mesmos:
public ProfanityFilterTest(String input, String output) {
this.input = input;
this.output = output;
filter = new ProfanityFilter();
}
A classe de testes deve ser configurada para rodar com um runner específico, o Parameterized:
@RunWith(Parameterized.class)
public class ProfanityFilterTest {
[...]
Com estes passos básicos, ao rodar a classe testes, cada teste será chamado uma vez com os parâmetros fornecidos.

Para conferir o código completo baixe ProfanityFilter.java e ProfanityFilterTest.java.
Chuck Norris escreve testes parametrizados! hehe