Antes de iniciar qualquer projeto é necessário instalar e preparar seu ambiente de desenvolvimento. No caso do PHP, a primeira coisa é ter ele instalado e configurado corretamente. Isso inclui adicionar o caminho do executável do PHP a sua variável de ambiente PATH.
Além do PHP, usaremos o Composer, uma ferramente essencial para quem trabalha com PHP, pois ela facilita o processo de instalação e gerenciamento de dependências dos nossos projetos.
Abra o terminal (shell), digite os comandos php -v
e composer --version
e veja se as respostas foram parecidas com isto:
$ php -v
PHP 7.0.1 (cli) (built: Dec 26 2015 19:13:09) ( NTS )
Copyright (c) 1997-2015 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2015 Zend Technologies
with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2015, by Zend Technologies
with Xdebug v2.4.1, Copyright (c) 2002-2016, by Derick Rethans
$ composer --version
Composer version 1.4.1 2017-03-10 09:29:45
O phpspec é o framework PHP que nos ajuda a construir testes automatizados através de uma abordagem conhecida como Behaviour driven development (BDD), que é a construção de testes no nível de especificação e história de usuários.
Visite o site do phpspec para mais detalhes.
A maneira mais simples de instala-lo em nosso projeto é utilizando o Composer, para isso, crie um arquivo composer.json
no diretório raiz do projeto e execute composer install
.
Você deverá ter uma resposta parecida com essa:
$ composer install
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 20 installs, 0 updates, 0 removals
- Installing symfony/yaml (v3.2.8): Loading from cache
- Installing symfony/process (v3.2.8): Downloading (100%)
- Installing symfony/finder (v3.2.8): Downloading (100%)
- Installing symfony/event-dispatcher (v3.2.8): Downloading (100%)
- Installing psr/log (1.0.2): Loading from cache
- Installing symfony/debug (v3.2.8): Loading from cache
- Installing symfony/polyfill-mbstring (v1.3.0): Loading from cache
- Installing symfony/console (v3.2.8): Loading from cache
- Installing sebastian/recursion-context (3.0.0): Loading from cache
- Installing sebastian/exporter (3.1.0): Loading from cache
- Installing doctrine/instantiator (1.0.5): Loading from cache
- Installing sebastian/diff (1.4.1): Loading from cache
- Installing sebastian/comparator (2.0.0): Loading from cache
- Installing webmozart/assert (1.2.0): Loading from cache
- Installing phpdocumentor/reflection-common (1.0): Loading from cache
- Installing phpdocumentor/type-resolver (0.2.1): Loading from cache
- Installing phpdocumentor/reflection-docblock (3.1.1): Loading from cache
- Installing phpspec/prophecy (v1.7.0): Loading from cache
- Installing phpspec/php-diff (v1.1.0): Downloading (100%)
- Installing phpspec/phpspec (3.4.0): Downloading (100%)
symfony/event-dispatcher suggests installing symfony/dependency-injection ()
symfony/event-dispatcher suggests installing symfony/http-kernel ()
symfony/console suggests installing symfony/filesystem ()
phpspec/phpspec suggests installing phpspec/nyan-formatters (Adds Nyan formatters)
Writing lock file
Generating autoload files
Oba! Se chegou até aqui é sinal que deu tudo certo com seu ambiente de desenvolvimento. Sinta-se preparado para criar seus primeiros testes utilizando o phpspec! As próximas seções irão guia-lo na construção desses testes, começando com exemplos bem simples e avançando com o tempo. Happy coding!
O phpspec possui um CLI (Command Line Interactive) que agiliza muito nosso trabalho, e criar um arquivo de teste com ela é algo bem simples.
$ bin/phpspec describe FizzBuzz
Após o comando, espera-se que seja criado o arquivo
spec/FizzBuzzSpec.php
.
Ele tem a seguinte estrutura:
<?php
namespace spec;
use FizzBuzz;
use PhpSpec\ObjectBehavior;
use Prophecy\Argument;
class FizzBuzzSpec extends ObjectBehavior
{
function it_is_initializable()
{
$this->shouldHaveType(FizzBuzz::class);
}
}
Existem duas coisas importantes aqui. Primeiro, o phpspec só considera como um comportamento do teste os metódos iniciados com
it_
eits_
. E segundo, é recomendado escrever métodos separados por undercore (_) ao invés de CamelCasing. Por quê? Não achamais_facil_ler_assim_assim
do que utilizandoCamelCasingAssimDessaManeira
? Nós achamos que sim, por isso, criaremos dessa maneira a partir de agora.
Agora que já temos nossa especificação de teste criado, chegou a hora de executa-lo. Obviamente ele irá falhar, pois ainda não criamos nossa classe FizzBuzz
.
No terminal, digite bin/phpspec run
e veja o resultado abaixo:
Uma funcionalidade legal do phpspec é que ele sugere a criação da classe quando ela não existe, normalmente na primeira vez. Perceba que na imagem acima, após executar o teste, ele pergunta se você deseja criar a classe FizzBuzz
. Viu? Diga se isso não é cool :)
Agora que já temos a classe FizzBuzz
, a brincadeira começa a ficar interessante, vamos então escrever as especificações da nossa classe.
O objetivo do FizzBuzz é exibir uma lista de números de 1 à 100, sendo que:
- Números múltiplos de 3 deve aparecer a palavra
fizz
; - Números múltiplos de 5 deve aparecer a palavra
buzz
; - E, números múliplos de 3 e 5 deve aparecer a palavra
fizzbuzz
;
Exemplo:
1, 2, fizz, 4, buzz, fizz, 7, 8, fizz, buzz, 11, fizz, 13, 14, fizzbuzz, 16,...