Base de Conhecimento

Desenvolvimento Baseado em Comportamento (BDD)

Para realizar testes em pequenas unidades de código como por exemplo, procedures e funções, nós usamos testes unitários. Para testes mais abrangentes utilizamos desenvolvimento baseado em comportamento, conhecido por BDD (Behavioural Driven Development). Ao utilizar esta abordagem, os testes são escritos de forma que tanto os stakeholders como os desenvolvedores são capazes de compreender.

Muita coisa têm sido escrita sobre BDD.

Se procurarmos na internet por ferramentas de desenvolvimento baseado em BDD, encontraremos os links descritos a seguir:

  1. This (YouTube é Roman apresentando os slides). Estes links são uma apresentação do framework escrito por ele, chamado DelphiSpec. A apresentação cobre somente o básico, mas mostra como se deve fazer
  2. Library: biblioteca Delphi para executar testes automatizados escritos em “plain language”
  3. dSpec: dSpec (beta status) é um framework BDD para Delphi/Pascal escrito como uma extensão do DUnit

DelphiSpec

Implementar testes funcionais utilizando este framework é relativamente fácil. Embora DelphiSpec não está muito bem documentado, ele possui algumuns projetos de demonstração que demostram as functionalidades existentes e o que pode ser feito com ela. Nós implementamos um conversor de números Romanos. O arquivo compactado em formato ZIP contém tanto o framework como o projeto de demonstração.

Não é difícil de se acrescentar novos testes, mas tudo é feito manualmente. Esta é uma opção de melhoria para este framework. Além disso: este framework BDD pode muito bem ser utilizado para implementar projetos Delphi.

Demonstrando a utilização do DelphiSpec

dSpec

No início, dSpec não vai compilar. O motivo para isso é que ele chama o construtor da classe on Self a partir de um método da instância da classe. Esta era uma técnica utilizada antes do Delphi XE3. Assim, poderíamos ter uma função na classe base um, que poderia ser chamada em objetos derivados de classes derivadas daquela classe base, para rapidamente criar objetos da classe derivada.

Este framework é utilizado de forma diferente. Ao invés de utilizar arquivos de funcionalidades, tudo é escrito no próprio código-fonte.

– Em primeiro lugar, sua classe deve ser estendida da classe “TContext”. Esta classe do dSpec estende da classe “TTestCase” (que é parte do DUnit)

– Esta classe “TContext” possui uma propriedade chamada “Specify”. Este objeto possui diversas sobrecargas de métodos que devolvem uma implementação da interface “ISpecifier” que por sua vez contém um método chamado “Should”.

– Utilizando este framework, você pode escrever uma declaração mais ou menos assim::

Specify.That(FFloat).Should.Be.GreaterThan(1).And_.Be.LessThan(2);

Neste exemplo, o FFloat estava descrito no método de setup. Todos os outros métodos fazem parte do framework.

Conversor de números romanos

Ao incluir o DelphiSpec framework no projeto dará suporte a um número limitado de funções da linguagem Gherkin. Ele possui seu próprio validador para este fim.

Suporte

O suporte para isso poderá ser enfadonho em Delphi. O framework DelphiSpec, que foi escrito em 2015 parece ser o melhor que temos e não nos parece possuir indicação de que futuros desenvolvimentos contemplarão fazer o parse dos arquivos .Pas gerando testes de forma automatizada. Tudo tem que ser feito de forma manual. Com certeza seria possível de se implementar um parser para esta finalidade, mas desde que o trabalho no DelphiSpec aparentemente parou, novas funcionalidades precisarão ser adicionadas a ele para que ele esteja totalmente atualizado.

FeatureParser

Written by Johnny Nap
Desenvolvedor Delphi

Contato

Deixe-nos ajudá-lo a realizar seus sonhos.