segunda-feira, 31 de março de 2014

Data Driven Testing (Teste guiado a dados)

Data-driven testing é a criação de scripts de testes para executar juntamente com conjunto de dados.

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/
 
 
 
 

Nenhum comentário:

Postar um comentário