Esqueleto do dojo deste ano. A ideia é praticar TDD com PHPUnit em PHP puro, com tudo rodando via Docker. Ninguém precisa instalar PHP na própria máquina.
Crie uma calculadora que tenha quatro operações. Que receba dois valores e retorne a operação (soma, subtração, multiplicação, divisão). Recebe:
num1,num2,operacaoe devolve"Resultado da soma 2"
Extra: um script em PHP que recebe dois números do usuário via formulário input e
mostra a soma, diferença, produto, divisão do primeiro pelo segundo e o resto da divisão
do primeiro pelo segundo. Os campos se chamam num1 e num2, e seus valores chegam em
$num1 e $num2 através do $_GET.
make setup
make testSe o make test passou, o ambiente está funcionando e o dojo pode começar.
| Comando | O que faz |
|---|---|
make help |
Lista todos os comandos |
make setup |
Prepara o projeto do zero (imagem + dependências) |
make test |
Roda a suíte de testes |
make test-filter FILTER=soma |
Roda só os testes que casam com o nome |
make coverage |
Suíte + relatório de cobertura no terminal |
make coverage-html |
Gera o relatório de cobertura em coverage/ |
make watch |
Re-roda a suíte a cada alteração (precisa do inotify-tools) |
make up |
Sobe o servidor em http://localhost:8000 |
make down |
Derruba os containers |
make shell |
Abre um shell dentro do container |
make clean |
Remove vendor/, caches e cobertura |
Os alvos instalam as dependências sozinhos caso o vendor/ não exista, então dá para ir
direto no make test depois de clonar.
Para trocar a porta do servidor: APP_PORT=8087 make up.
O make up usa o servidor embutido do PHP, que é feito para desenvolvimento.
.
├── compose.yaml serviço app (PHP CLI + servidor embutido)
├── Dockerfile PHP 8.4 + Composer + pcov
├── Makefile atalhos para tudo
├── phpunit.xml configuração do PHPUnit
├── public/ o que o navegador acessa
│ ├── css/estilos.css
│ ├── img/ logo da comunidade
│ └── index.php junta a entrada, os resultados e o template
├── src/ o desafio, namespace Dojo\
│ └── Calculadora.php
├── tests/ namespace Dojo\Tests\
│ ├── AmbienteTest.php teste de fumaça, pode apagar
│ └── Web/ testes do código de apresentação
└── web/ código de apresentação, namespace Dojo\Web\
├── EntradaFormulario.php lê e valida o que veio no $_GET
├── FormatadorNumero.php exibe número no formato pt-BR
├── Operacao.php rótulo e símbolo de cada operação
├── Renderizador.php junta template com dados e escapa a saída
└── templates/
└── calculadora.php só marcação, sem regra de negócio
O autoload é PSR-4: Dojo\ aponta para src/, Dojo\Web\ para web/ e Dojo\Tests\
para tests/. Ao criar uma classe nova em src/, não precisa fazer mais nada, é só rodar
os testes.
src/ contém apenas o código do desafio. É onde a Calculadora deve ser implementada e é
o único diretório medido pelo relatório de cobertura.
web/ contém o código de apresentação: leitura do formulário, formatação de número e
geração do HTML. Não deve conter regra de negócio.
public/index.php recebe a requisição, usa as classes de web/ para montar os dados da
página e é o ponto onde a Calculadora será chamada.
O frontend já está pronto. O que falta é o cálculo.
Em public/index.php existe o array $resultados, com as cinco chaves em null. Enquanto
uma chave estiver null, o cartão correspondente é exibido com a marcação "a implementar".
Ao preencher a chave com o valor devolvido pela Calculadora, o cartão passa a exibir o
resultado. Os números já chegam validados e convertidos em $entrada->numero1 e
$entrada->numero2.
- Red: escreva um teste que falha, descrevendo o próximo comportamento desejado.
- Green: escreva o código mais simples que faz o teste passar.
- Refactor: melhore o código com a suíte verde te protegendo.