Fala ai Radizeiros e Radizeiras, tudo bem com vocês?
Dando continuidade a saga de teste unitário em nosso blog.
Neste post estarei falando da propriedade do Assert do DUnit, mais uma forma de validarmos as nossas funcionalidades.
Em posts anteriores falei do IsTrue e ISFalse, AreEquals e IsNotEmpty, e neste post estarei falando de mais um que é o WillRaise.
Vamos criar em nussa classe TPessoa uma procedure para ValidarCampos.
Type TPessoa = class private FNOME : String; procedure SetNome(const Value : String); public procedure ValidarCampos; published function TratarCPFCNPJ(aValue : String) : String; property NOME : String read FNOME write SetNome; end; ... procedure TPessoa.ValidarCampos; begin if FNOME = '' then raise Exception.Create('NOME não pode ser vazio'); end;
Observe que nosso método esta verificando se o objeto FNOME está vazio, em caso de verdadeiro ele irá retornar um Raise.
Essas validações são útil, tem alguns campos que não podem ser vazios ou receber tipos de caracteres que não são permitidos para persistirem no banco de dados.
Você pode testar sua aplicação se está validando isso corretamente.
Então para que possamos criar testes para o método criado, vamos ao nosso caso de testes e acrescentar este método.
type [TestFixture] TMyTestObject = class(TObject) private FPessoa : TPessoa; public [Setup] procedure Setup; [TearDown] procedure TearDown; [Test] procedure TesteTratarCPFCNPJ; [Test] [TestCase('CaseCPF','123.123.123-12,12312312312')] [TestCase('CaseCNPJ','12.123.123/0001-12,12123123000112')] procedure TratarCPFCNPJ(aValue : String; aResult : String); [Test] procedure ValidaNome; [Teste] procedure ValidarCampos; end; ... procedure TMyTestObject.ValidarCampos; begin FPessoa.NOME := ''; Assert.WillRaise(FPessoa.ValidarCampos, nil, 'TPessoa.ValidarCampos'); end;
Observe que criamos um teste com o método ValidarCampos, dentro desse método passamos o Assert.WillRaise, na imagem abaixo você pode ver que o WillRase pede um método, uma exceção para classe, e uma mensagem.
Em nosso código passamos para o WillRaise o método ValidarCampos, no seu segundo parâmetro deixamos como nil, porque não queremos validar nada, e na mensagem colocamos a o método que resultou o erro.
procedure TMyTestObject.ValidarCampos; begin FPessoa.NOME := ''; Assert.WillRaise(FPessoa.ValidarCampos, nil, 'TPessoa.ValidarCampos'); end;
Talvez você esteja se perguntando, o que esse WillRaise faz?
Ele valida se houve uma exceção, se houve um raise no método.
Passamos vazio para o nome para termos certeza que ele está vazio, fazendo isso estou forçando um erro.
Se o método der erro onde foi forçado o erro, é sinal que está funcionando, agora se não der a exceção, iremos identificar que tem um erro, porque forçamos esse erro passando um valor vazio e o método deixou passar, dessa forma nós testamos as exceções de nossas classes com o WillRaise.
Vamos executar nosso teste.
Observe que todos os meus testes passaram, eu forcei o erro no teste do ValidarCampos e o erro aconteceu, agora vamos comentar as informações no método ValidarCampos da nossa classe Pessoa.
procedure TPessoa.ValidarCampos; begin //if FNOME = '' then //raise Exception.Create('NOME não pode ser vazio'); end;
Deixei comentado pois não quero que de exceção nessa meu método, eu estou passando um valor em brando para o nome e ele não esta testando, então a exceção não está funcionando.
Viu agora, 5 testes foram executados, 4 passaram e 1 deu erro, e o que deu erro é o meu ValidarCampos.
Desta forma sabemos onde deu o erro e vamos lá e ajustamos.
Fazendo isso você deixa seu código muito mais seguro, sabe aquele negócio de liberar versão para o cliente, e descobrir que está com erro só no cliente, se você implementar testes unitário em seu software, e um outro nível.
Você pode talvez possa está se dizendo que isso irá lhe dar trabalho, realmente da trabalho, mas se você conseguir implementar esses testes, o nível de qualidade do seu projeto vai para as alturas, e conseguente mente irá lhe sobrar mais tempos para outras coisas, pois aqueles erros desesperadores que você sobe seu software para produção e dar erro no cliente , e você tem que corrigir desesperadamente irá reduzir.
Esse post faz parte de um dos meus treinamentos a CERTIFICAÇÃO ESPECIALISTA EM CLEAN CODE E BOAS PRÁTICAS DE PROGRAMAÇÃO.
A Certificação Especialista em Clean Code e Boas Práticas de Programação dará a você a oportunidade de melhorar seu software, otimizar o seu tempo e te dar a possibilidade de atender melhor os seus clientes. Conhecer a fundo essas técnicas e utilizar todos os seus benefícios irá facilitar muito a sua vida quando houver necessidade por parte de um cliente de um update rápido ou resolver um problema.
CLIQUE AQUI PARA SABER MAIS SOBRE A CERTIFICAÇÃO ESPECIALISTA EM CLEAN CODE E BOAS PRÁTICAS DE PROGRAMAÇÃO