Tableless

Busca Menu

BDD na prática – Parte 1

Seja o primeiro a comentar por

Se você não sabe o que é Behavior driven development, para ter um melhor proveito desse artigo,  leia uma introdução ao BDD antes de prosseguir.

Para começo de conversa, estaremos fazendo uma abordagem prática sobre testes de comportamento. Para isso, utilizaremos a biblioteca para testes behat. Vamos ao nosso arquivo composer.json:

{
    "require-dev": {
        "behat/behat": "2.4.*@stable"
    },
    "config": {
        "bin-dir": "bin/"
    }
}

Se ainda não estiver familiarizado com o uso do composer para gerenciamento de dependências de seus projetos em php, vale a pena dar uma olhada em composer para iniciantes.

Agora, basta instalar nossas dependências com o seguinte comando:

$ composer install

Captura de tela 2014-04-06 13.52.43
De forma alternativa, você poderá fazer uma instalação global baixando o arquivo behat.phar e deixando acessível de seu sistema operacional, geralmente esse processo é simples, e basta criar um link simbólico em /usr/local/bin para o arquivo que deseja executar.

Como funciona?

Se dermos uma olhada na estrutura que o composer criou para a gente, notaremos que um diretório feature foi criado. Nesse diretório criaremos os arquivos *.feature que descreverão um conjunto de ações para atingir um determinado objetivo.

Para começar criaremos o arquivo example.feature.

Estrutura de diretórios

Se você estiver usando o Sublime Text, instale essa extensão https://github.com/omissis/sublime-behat-syntax que provê highlight em arquivos *.feature

No nosso arquivo example.feature, iremos descrever nosso cenário, o que queremos testar.

Captura de tela 2014-04-06 14.54.18

Com uma feature já escrita, iremos executar o behat para nos dar a descrição e métodos dessa feature em PHP, daí prosseguiremos com a implementação dos métodos que eles nos forneceu. Para isso basta executarmos o arquivo behat, dentro da pasta bin que foi criada pelo composer.

$ bin/behat features/example.feature

Behat feature

Assim, o behat cospe pra nos um código PHP para que coloquemos na classe de feature. E aí começaremos a codar os cenários. No arquivo features/bootstrap/FeatureContext.php colaremos o código que foi fornecido pelo behat.

<?php

use Behat\Behat\Context\BehatContext;

class FeatureContext extends BehatContext
{
    /** @Given /^some step with "([^"]*)" argument$/ */
    public function someStepWithArgument($argument1)
    {
        return $argument1;
    }

    /** @Given /^number step with (\d+)$/ */
    public function numberStepWith($argument1)
    {
        return $argument1;
    }
}

Aqui temos uma classe simples, que não testa nada, mais é um bom ponto de partidada para entender como funciona a ferramenta e o esquema de testes de comportamento. Pois codar os cenários deve ser a parte mais fácil do processo, se você tem steps bem definidos.

para rodar esse testes execute o seguinte comando.

$ bin/behat features/example.feature

Hello world

Agora que temos uma ideia de como o behat trabalha, faremos o clássico hello world.
Em nosso arquivo example.feature descreveremos o seguinte cenário:

Hello world feature behat

Nesse cenário estaremos testando que quando passarmos a string Hello world, nossa classe tem que concatenar nossa string a uma exclamação. Com isso já poderemos escrever nossa classe PHP para testar essa feature.

<?php

use Behat\Behat\Context\BehatContext;

class FeatureContext extends BehatContext
{
    private $_string;

    /** @Given /^some step with "([^"]*)" argument$/ */
    public function someStepWithArgument($string)
    {
        $this->_string = strtolower($string);
    }

    /**
     * @Then /^i have "([^"]*)"$/
     */
    public function iHave($expected)
    {
        if (0 !== strcmp(strtolower($expected), $this->_string.'!'))
            throw new Exception('Wrong "hello world" received: '.$this->_string );

        return $expected;
    }
}

Se executarmos o teste com o behat, poderemos ver como está o nosso cenário.

 

Behat hello world execution

Conclusão

Escrever testes de comportamento é sempre bom, e podemos consulta-los sempre, seja pra esclarecer uma regra de negócio ou para integrar novas pessoas ao time de desenvolvimento. Vendo os cenários sabemos exatamente o que uma classe/entidade deve fazer. Seu objetivo e contexto ficam claros. Os incentivo fortemente a implantar uma cultura de testes de software em sua empresa e projetos. Você tem muito a ganhar a longo prazo.

Publicado no dia