Hoje vim falar um pouquinho sobre o
Assert
, uma função muito usada em testes unitários mas pouco difundida durante o desenvolvimento do código de produção.
Mas, afinal, o que faz o Assert
e como ele pode nos ajudar?
O
Assert
é um dos métodos intrínsecos do Delphi que pode ser usado como uma ferramenta de debug para testarmos condições que não deveriam ser violadas. Ele nos ajuda a interceptar uma situação inesperada interrompendo, então, a execução do programa.Esse método recebe por parâmetro uma expressão booleana e, opcionalmente, uma mensagem em formato string. Se o teste da expressão falhar, o
Assert
lançará uma exceção do tipo EAssertionFailed
:procedure Assert(Condition: Boolean; [ Message: string ]); overload;Assim, um exemplo de uso do
Assert
seria:procedure TfrmTesteAssert.btnTestarAssert1Click(Sender: TObject); var l: Integer; begin l := 10; Assert(l = 0); Inc(l); end;No exemplo acima, como o valor da variável
l
não é igual a zero, então, o Assert
lançará a seguinte exceção e nem mesmo executará o código após a validação.Personalizando a mensagem de erro
Caso seja passado uma mensagem no segundo parâmetro da chamada do
Assert
, o retorno “Assertion failure” será substituído pela mensagem informada, por exemplo:procedure TfrmTesteAssert.btnTestarAssert2Click(Sender: TObject); var l: Integer; begin l := 10; Assert(l = 0, 'Número precisa ser igual a 0 (zero), mas foi informado: ' + l.ToString); Inc(l); end;Neste caso a exceção apresentada será:
Mas, quando utilizar o Assert
?
O
Assert
, é um procedimento de prática defensiva, ou seja, ele deve ser utilizado para garantir o estado do seu programa, pegando o erro antes mesmo que ele aconteça em ambiente de produção, e nunca deve ser utilizado para validação de entrada de dados.Veja que, além de interromper a execução do programa, o
Assert
também exibe informações técnicas, como o nome da unit e linha onde a validação falhou, por isso, é importante sempre desativar os asserts ao buildarmos a aplicação em release para distribuição ao usuário final. E para isso, o Delphi nos disponibiliza algumas formas.A primeira, é pelas opções do projeto, na qual é possível ajustar a opção Assertions, localizada dentro da aba Compiling, conforme pode-se ver na imagem abaixo:
Dica: para acessar as opções do projeto, basta ir no menu Project e lá no final você vai encontrar a opção Options.
A segunda forma é através de diretivas de compilação, que podem ser colocadas em blocos de códigos, ou definida para toda uma
unit
. São elas:$ASSERTIONS ON/OFF // long form $C +/- // short formPara desativar em um bloco de código, você pode usar da seguinte forma:
procedure TfrmTesteAssert.btnTestarAssert3Click(Sender: TObject); var l: Integer; begin l := 10; {$ASSERTIONS OFF} Assert(l = 0, 'Número precisa ser igual a 0 (zero), mas foi informado: ' + l.ToString); {$ASSERTIONS ON} l := 0; Assert(l = 10, 'Número precisa ser igual a 10 (zero), mas foi informado: ' + l.ToString); end;Já para desativar a diretiva em um arquivo inteiro, você precisa colocar a diretiva bem no início do arquivo. Por exemplo:
unit OutroTeste; interface {$ASSERTIONS OFF} uses Dialogs;
Importante dizer, que essa diretiva vale por arquivo, ou seja, para cada arquivo que desejarmos desativar o
Assert
será necessário colocar a diretiva. Caso a intenção seja desativar do projeto inteiro, basta utilizar a primeira opção, ou seja, desativar nas configurações do projeto.Por fim, podemos concluir que:
- O uso do
Assert
pode ser bem útil na busca de bugs ainda na fase de desenvolvimento; - O seu uso não substitui os Testes Unitários ou os Testes de Integração, que são extremamente importantes para garantir o correto funcionamento do sistema.
A documentação oficial do
Assert
você pode conferir no site da Embarcadero que explica sobre esta função.Forte abraço e nos vemos no próximo post! ;)
Autor: Flávia Melo
Esse exemplo e tantos outros disponíveis aqui no blog, você pode conferir acessando meu repositório no github.
Postar um comentário