Aprende a testar os teus exercícios de Factor no Exercism
Quando descarregas um exercício, o Exercism guarda-o numa pasta autónoma, por exemplo ~/exercism/factor/hello-world. Essa pasta contém uma subpasta com a tua solução e outra com o executor de testes:
hello-world/
├── hello-world/
│ ├── hello-world.factor <- your solution
│ └── hello-world-tests.factor <- the tests
└── exercism-tools/ <- the bundled test runner
Faz cd para a raiz dessa pasta e executa os testes com:
factor -roots=. -run=exercism-tools <exercise>
Substitui <exercise> pelo nome do exercício (o mesmo nome da pasta). Por exemplo, para testar hello-world:
cd ~/exercism/factor/hello-world
factor -roots=. -run=exercism-tools hello-world
Executa o comando a partir da raiz da pasta do exercício, ou seja, o diretório que contém as subpastas <exercise> e exercism-tools.
São os mesmos testes que o Exercism executa quando submetes, por isso, quando passarem todos localmente, estás pronto para submeter.
Cada exercício começa com apenas o primeiro teste ativo. Os restantes testes ficam retidos por uma linha STOP-HERE no ficheiro <exercise>-tests.factor; o executor ignora tudo o que está abaixo dela.
"year not divisible by 4 in common year" description
{ f } [ 2015 leap-year? ] unit-test
STOP-HERE
"year divisible by 2, not divisible by 4 in common year" description
{ f } [ 1970 leap-year? ] unit-test
Faz com que o primeiro teste passe, depois move a linha STOP-HERE para baixo do teste seguinte (ou apaga-a para os ativar a todos) e executa os testes outra vez. Avança pelo ficheiro desta forma até todos os testes passarem.
Quando submetes, o executor do Exercism ignora a linha STOP-HERE e executa todos os testes, por isso certifica-te de que passam todos antes de submeteres.
O executor imprime cada teste que executou e termina em silêncio:
Unit Test: { { f } [ 2015 leap-year? ] }
O executor mostra o teste e, depois, o valor que esperava em comparação com o valor que o teu código produziu:
Unit Test: { { f } [ 2015 leap-year? ] }
--> test failed!
###FAIL_BEGIN###
leap/leap-tests.factor: 5
=== Expected:
f
=== Got:
t
###FAIL_END###
Aqui, o teste executou 2015 leap-year? e esperava f na pilha, mas obteve t.
Os testes são escritos com unit-test, que recebe um array que descreve como a pilha deve ficar depois de executar uma quotation:
{ 3 } [ 1 2 + ] unit-test
Isto executa [ 1 2 + ] e verifica que deixa 3 na pilha. Um array vazio, { }, significa que a quotation deve deixar a pilha vazia. A linha description opcional acima de um teste dá-lhe apenas um nome legível.
Para mais detalhes, consulta a documentação do Factor sobre testes unitários.