FrameworkDemoiselle.gov.brCommunity Documentation
Neste capítulo detalharemos como o Dbehave tratava originalmente as histórias que compunham um cenário e como elas serão tratadas a partir da nova versão.
Ao trabalhar com o framework, lidamos basicamente com 3 itens, a seguir:
Ao executar somente um método de uma classe nenhum problema ocorria, porém ao executar um conjunto de classes ao mesmo tempo, o DBehave apresentava um comportamento diferente para cada um dos itens listados.
Este comportamento acarretava em um problema no design dos testes. Ao executar várias classes de teste, tínhamos sempre que em cada método redefinir os passos e reusos, porém não podíamos redefinir as histórias.
Manter todas as histórias em memória também não é uma boa solução do ponto de vista computacional, pois com testes extensos, a tendência é que o framework fique sobrecarregado.
Outro ponto importante que merece destaque é que a execução do JUnit é aleatória, ou seja, a cada execução uma das classes do conjunto é sorteada e essa aleatoriedade vai até o ponto dos métodos.
Como o framework mantinha as histórias em memória, ao programar cada método de teste, para que ficassem corretamente encapsulados, tínhamos que em cada um definir todas as histórias que o compunham. Porém como a história já havia sido adicionada previamente o framework apresentava o erro de duplicidade de um .story.
Desta forma ou definíamos que um conjunto de testes sempre iria executar em conjunto ou individualmente, pois o comportamento errático da ferramenta não permitia um bom design de projeto.
Para solucionar o problema apresentado no tópico anterior, definimos um conjunto de escopos para cada um dos elementos, permitindo assim que o desenvolvedor defina sua melhor forma de trabalho.
Para manter a retrocompatibilidade com os projetos anteriores, a nova versão do DBehave vem automaticamente preparada para o modo Legado.
É necessário no behave.properties alterarmos a configuração behave.runner.legacyRunner=true para false. Desta forma habilitamos a ferramenta para trabalhar com o novo modo de escopos.
A nova API para cada elemento segue:
Lembrando que os modos de execução da ferramenta são exclusivos, ao utilizar a nova versão, os comandos context.addSteps(),context.addStories() e context.addStoriesReuse() não serão permitidos. O mesmo acontece ao utilizar o modo legado e a nova API.
Importante: ao utilizar o escopo de classes, a sua classe deverá obrigatoriamente estender a classe ClassScopeManager. Caso não estenda, o framework apresentará um erro mostrando a obrigatoriedade do mesmo.