A estrutura exige uma lógica reutilizável para que as entradas e resultado esperado sejam fornecidas pelos dados e a ação se repete variando os dados.
Esse conceito existe no Junit com a classe Parameterized. doc: http://junit.sourceforge.net/javadoc/org/junit/runners/Parameterized.html
Para utilizar, deve colocar a anotação na classe:
@RunWith(Parameterized.class)
Além de colocar anotação no método estático que provê os dados:
@Parameterized.Parameters
Dessa forma é possível colocar dados em seus scripts do JUnit.
Mas para facilitar criei um método que le de um xls e retorna o matriz de objetos.
Usando a biblioteca jxl, alterar o pom.xml (ou adicionar o jar) com:
<dependency>
<groupId>net.sourceforge.jexcelapi</groupId>
<artifactId>jxl</artifactId>
<version>2.6.12</version>
</dependency>
O metodo ficou assim:
public class ReaderXls {
public static Object[][] lerXls(String arquivo) {
Workbook workbook = null;
try {
workbook = Workbook.getWorkbook(new File(arquivo));
} catch (Exception e) {
e.printStackTrace();
}
Sheet sheet = workbook.getSheet(0);
int linhas = sheet.getRows();
int colunas = sheet.getColumns();
System.out.println(linhas);
System.out.println(colunas);
Object[][] retorno = new Object[linhas][colunas];
for (int i = 0; i < linhas; i++) {
Object[] linha = new String[colunas];
for(int j =0; j < colunas; j++)
{
linha[j] = sheet.getCell(j, i).getContents();
}
retorno[i] = linha;
}
return retorno;
}
}
O metodo de dados na classe de teste ficou assim:
@RunWith(Parameterized.class)
public class CadastroUsuarioTest{
@Parameterized.Parameters
public static Collection<Object[]> dados(){
Collection dados = Arrays.asList(
ReaderXls.lerXls("C:\\Automacao\\usuario.xls")
);
return dados;
}
Veja exemplos em:
http://examples.javacodegeeks.com/core-java/junit/junit-parameterized-test-example/
http://www.mkyong.com/unittest/junit-4-tutorial-6-parameterized-test/