Aprende a testar os teus exercícios de YAMLScript no Exercism.
Testar soluções de exercícios do Exercism escritas em YAMLScript é extremamente fácil. É fácil de executar e fácil de compreender.
Basta executares make test no diretório do exercício.
Da primeira vez que executas make test, todos os testes falham, simplesmente porque
ainda não escreveste código nenhum para resolver os testes.
O processo normal de desenvolvimento de um exercício é começar com make test e depois
concentrar-te num teste de cada vez, escrevendo código para fazer esse teste passar.
Quando todos os testes passarem, está feito!
Como bónus, executar make test também garante que a versão correta do
intérprete ys do YAMLScript (a que o exercício atual exige) fica instalada no sítio
certo (em /path/to/exercism/yamlscript/.local/).
Isso significa que nem sequer precisas de instalar o ys antes para começar!
Se estiveres a trabalhar num exercício chamado the-great-exercise, então exercism download --exercise=the-great-exercise --track=yamlscript cria o
diretório /path/to/exercism/yamlscript/the-great-exercise.
Dentro deste diretório, o ficheiro de testes chama-se the-great-exercise-test.ys
e o ficheiro do programa de solução chama-se the-great-exercise.ys.
Haverá também um ficheiro README.md com a descrição do exercício e um
ficheiro HELP.md com algumas informações úteis para o caso de ficares preso.
Há dois ficheiros para o make: o Makefile e o GNUmakefile.
Isto serve para garantir (sem trocadilhos) que estás a usar o GNU make para executar
os testes e não outro comando make qualquer que esteja instalado no teu sistema.
O GNUmakefile é o verdadeiro e o GNU make vai sempre preferi-lo em vez do
Makefile.
Outros comandos make vão usar o Makefile, que deve dar erro com uma mensagem
a dizer para usares o GNU make!
Os testes de YAMLScript são escritos em YAMLScript, claro! Dado que o YAMLScript é YAML e o YAML é dados, os testes são basicamente só dados.
Aqui está um exemplo de um ficheiro de testes simples.
Na verdade, são os primeiros 3 testes do exercício acronym. :-)
#!/usr/bin/env ys-0
use ys::taptest: :all
load: 'acronym.ys'
test::
- name: Basic
code: abbreviate('Portable Network Graphics')
want: PNG
- name: Lowercase words
code: abbreviate('Ruby on Rails')
want: ROR
- name: Punctuation
code: abbreviate('First In, First Out')
want: FIFO
done: 3
A primeira linha é uma linha shebang que diz ao comando prove (executado pelo
Makefile) para usar o intérprete ys do YAMLScript para executar os testes em vez do
perl, que é o predefinido do prove.
A segunda linha é uma instrução use que carrega a biblioteca de testes ys::taptest
TAP do YAMLScript.
Nota: o TAP é uma interface simples baseada em texto entre scripts de teste e harnesses de teste, e o
proveé o harness padrão para executar testes TAP em Perl. Como o Perl é tão ubíquo, usar o TAP e oproveacaba por ser uma excelente escolha para conjuntos de testes em muitas linguagens (incluindo o YAMLScript).
A instrução use carrega o programa de solução acronym.ys que este ficheiro de testes
está a testar.
Todos os nossos testes estão numa sequência YAML sob a chave test.
A última linha done: é obrigatória e diz ao harness de testes que todos os testes
foram realmente executados.
O número (que é opcional) é o número de testes que esperávamos executar.
Cada teste (sob a chave test) é um mapeamento com estes pares chave/valor:
name: - O rótulo do teste, que é impresso pelo prove -v.code: - O código YAMLScript a executar.
Este código vai chamar alguma função do programa de solução em que estamos a trabalhar.what: - Nos testes que esperam que ocorra um erro, o valor é error.
Nos testes normais, o par não está presente.want: - O resultado esperado do teste.
É um valor YAML e pode ser uma string, um número, um boolean, uma sequência ou um mapa.
Se what: for error, então este valor é a mensagem de erro esperada.SKIP: - Define isto como true para ignorar esse teste.ONLY: - Define isto como true para executar apenas esse teste.
Se tiveres mais do que um teste ONLY:, cada um deles será executado.Isto deve ser tudo o que precisas de saber para fazeres desenvolvimento orientado por testes em YAMLScript nos exercícios do Exercism!
A biblioteca ys::taptest tem outras funcionalidades que podes usar para escrever
testes mais complexos, mas os testes do Exercism já foram escritos para ti.
Para saberes mais sobre a biblioteca ys::taptest, consulta a documentação.