Administração do sistema
Testes unitários com o Telescope Script Engine
RT.FAQ-90946
O Telescope Script Engine possui um conjunto de comandos para a execução de testes unitários.
Os comandos tem uma semelhança com comandos de outras bibliotecas de testes unitários como o JUnit.
Para que os testes sejam devidamente reportados, deve-se definir que o script está executando testes através do comando:
set testing on;
Os comandos que executam os testes propriamente ditos são:
ASSERT-TRUE
Testa se uma expressão é verdadeira:
assert-true 'Mensagem ' where boolean-expression;
Retorna:
- OK a expressão for verdadeira
- ERR se a expressão for falsa
Exemplo:
assert-true 'Usuário admin cadastrado!'
where exists (select 1 from usuarios where login = 'admin');
ASSERT-FALSE
Testa se uma expressão é false:
assert-false 'Mensagem ' where boolean-expression;
Retorna:
- OK a expressão for falsa
- ERR se a expressão for verdaderia
Exemplo:
assert-false 'Todos usuários tem login!'
where exists (select 1 from usuarios where login is null);
ASSERT-EQUALS
Compara valores esperados com retornados e registra erro caso os valores não combinarem:
assert-equals 'Mensagem 1', esperado1, expr1
[,'Mensagem 2', esperado2, expr2 ...]
[from ...]
[where ...];
Retorna
- OK se os valores retornados nas expressões for igual aos esperados.
- ERR se algum dos valores não for igual ao esperado.
Exemplo:
assert-equals 'Saldos diarios: Saldo anterior', 150, saldo_anterior
, 'Total créditos', 0, total_creditos
, 'Total débitos', 120, total_debitos
, 'Saldo final', 30, saldo
from saldos_diarios_caixas
where caixa_id = ${cx1}
and data = '2018-02-15';
ASSERT-NOT-EQUALS
Exatamente igual ao anterior, mas retornando:
- OK se todos os valores retornados nas expressões forem diferentes dos esperados.
- ERR se algum dos valores for igual ao esperado.
ASSERT-ERROR
Determina que se espera que o próxima comando gere uma mensagem de erro:
assert-error 'Mensagem';
A execução do comando seguinte retorna:
- OK se o comando gerar um erro.
- ERR se o comando não gerar erro.
Exemplo:
assert-error 'Não permite incluir produto cancelado';
ins itens_pedidos
set produto_id = ${produtocancelado}
, pedido_id = ... ;
ASSERT-NULL 'Mensagem' expr [from ...] [where ...];
Executa comando
select expr [from ...] [where ...];
Busca todas as linhas.
ERR Se alguma linha retornar coluna não nula
OK Se nenhuma linha retornar coluna nula
ASSERT-NOT-NULL 'Mensagem' expr [from ...] [where ...];
Idem anterior mas testando not null.
ASSERT-REGRESSION
Compara o resultados de um SQL com o que foi obtido anteriormente.
Sintaxe:
assert-regression 'Mensagem'
, 'hash-esperado'
, expr [, expr] ...
[from tabela
join ...
where ...
order by ...];
Este comando gera um hash juntando todas as informações obtidas em uma consulta SQL e compara com um hash esperado.
Este teste não verifica se os resultados estão corretos mas identifica alguma mudança no comportamento.
Para obter o HASH esperado, execute o comando a primeira vez de forma a gerar um erro e utiliza o hash obtido como o esperado no script.
Exemplo:
assert-regression 'Regressão dos horários da agenda'
, '07cd1efd96a24d2ca5bbe5f3acb8e785b3bafc31'
, dia_semana, entrada_1, saida_1, entrada_2, saida_2, adicional
from horarios_trabalho h
join jornadas_trabalho j on j.id = h.jornada_id
where j.jornada_trabalho = 'J1';
Importante
A expressão SQL utilizada não pode incluir expressões que podem variar naturalmente nas execuções distintas como:
- IDs ou números gerados a partir de sequencias
- Datas e horas obtidas do sistema operacional
- Outras informações aleatórias e que cuja variação não impacta para o teste.
SYSDATE
Existem situações de rotinas que utilizam a data do sistema na lógica do negócio. Nestes casos, pode necessário forçar uma data para que seja possível verificar os resultados da forma apropriada.
O comando SYSDATE permite estabelecer um data e hora que passará a ser utilizada como data/hora correntes durante a execução do teste.
Syntaxe:
sysdate yyyy-mm-dd hh:mm:ss;
Exemplo:
sysdate 2018-01-01 08:00:00;