A importância da realização dos testes em um sistema não é motivo de discussão, mas sem o apoio de ferramenta para automatizar esses testes, essa atividade pode tornar-se um verdadeiro calvário. Ainda mais se houver a necessidade que essa execução ocorra várias vezes ao longo do cilo de vida da aplicação.
Se pensarmos de forma simplista temos duas abordagens para testes:
1 - Dada uma entrada, existe uma saída esperada
2 - Dada uma entrada, observar como será o comportamento do sistema
Nos prendamos a primeira abordagem.
O princípio básico dos testes unitários com o junit se dá através de afirmações (assertions), ou seja, você programa várias afirmações para suas classes através de seus métodos: "dado duas entradas 1 e 1, é esperado que a soma seja 2" e assim por diante.
O Selenium usa esse mesmo princípio realizando testes em função dos resultados respondidos pelo sistema, com o seguinte tempero: Os testes dizem respeito ao sistema como um todo - tipicamente são testes funcionais. Um simples navegar de telas pode reprentar a realização de um cálculo complexo. E é justamente neste ponto que precisamos ter atenção.
Vamos a um exemplo simples: Uma calculadora de Horas extras para profissionais CLT. Dado um volume de horas trabalhadas e seu salário, a calculadora responde quanto você deve receber. Para este simples exemplo temos alguns cenários possíveis:
a) As horas trabalhadas foram durante a semana;
b) As horas trabalhadas foram num feriado;
c) As horas trabalhadas foram de um dia até o outro.
Esse tipo de cálculo prevê uma série de adicionais que devem incidir sobre o cálculo de suas horas, de modo que para este exemplo simples os dados existentes para o sistema acabam ganhando uma importância grande.
Num sistema de maior complexidade o conhecimento prévio desses dados ganha um nível a mais. Dessa forma é muito importante que tenhamos conhecimento prévio dessa massa de dados para os casos de testes que serão executados principalmente porque, dado o automatismo, a possibilidade de repetição é fundamental para um boa produtividade na criação de códigos com qualidade.
Seguindo o princípio K.I.S.S. (Keep It Stupidly Simple), podemos criar facilmente uma classe que carregue o banco de dados a partir de um arquivo .SQL onde cada linha tem um comando SQL:
public class CarregaMassaDados {
public static void cargaDados(String arquivoSql) {
String stm = "";
BufferedReader in = null;
Connection connection = null;
Statement stmt = null;
if ((arquivoSql == null) ("".equals(arquivoSql))) {
throw new RuntimeException("O Parâmetro arquivoSql deve ser informado");
}
try {
Class.forName("org.postgresql.jdbc3.Jdbc3ConnectionPool");
connection =
DriverManager.getConnection(
"jdbc:postgresql://127.0.0.1:5432/BDAplicacao",
"LOGIN",
"SENHA");
in = new BufferedReader(new FileReader(arquivoSql));
stmt = connection.createStatement();
String sql;
while ((sql = in.readLine()) != null) {
stmt.executeUpdate(sql);
}
} catch (ClassNotFoundException e) {
throw new RuntimeException("Database driver não encontrado.");
} catch (SQLException e) {
throw new RuntimeException("Database não conectado.");
} catch (IOException e) {
throw new RuntimeException("Impossivel ler o arquivo.");
} finally {
try {
if (in != null) in.close();
if (stmt != null) stmt.close();
if (connection != null) connection.close();
} catch (IOException e) {
throw new RuntimeException("Impossivel ler o arquivo.");
} catch (SQLException e) {
throw new RuntimeException("Database não conectado.");
}
}
}
}
A chamada a carga de dados pode ser colocada no início dos seus testes, permitindo que a sua massa de dados seja conhecida garantido assim a repetividade de seus testes.
Abraços.
Assinar:
Postar comentários (Atom)
Nenhum comentário:
Postar um comentário