Aprenda a testar seus exercícios de Factor no Exercism
Quando você baixa um exercício, o Exercism o salva como uma pasta independente, por exemplo ~/exercism/factor/hello-world. Essa pasta contém uma subpasta com a sua 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
Use cd para entrar na raiz dessa pasta e rode os testes com:
factor -roots=. -run=exercism-tools <exercise>
Substitua <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
Rode o comando a partir da raiz da pasta do exercício, o diretório que contém tanto a subpasta <exercise> quanto a exercism-tools.
São os mesmos testes que o Exercism roda quando você envia a solução, então, quando todos passarem localmente, você já pode enviar.
Cada exercício começa com apenas o primeiro teste ativo. Os demais testes ficam bloqueados por uma linha STOP-HERE no arquivo <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
Faça o primeiro teste passar, depois mova a linha STOP-HERE para depois do próximo teste (ou apague-a para habilitar todos) e rode os testes de novo. Siga avançando pelo arquivo assim até todos os testes passarem.
Quando você envia a solução, o executor do Exercism ignora STOP-HERE e roda todos os testes, então verifique se todos passam antes de enviar.
O executor imprime cada teste que rodou e sai em silêncio:
Unit Test: { { f } [ 2015 leap-year? ] }
O executor mostra o teste, depois o valor que ele esperava em comparação com o valor que o seu 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 rodou 2015 leap-year? e esperava f na pilha, mas recebeu t.
Os testes são escritos com unit-test, que recebe um array descrevendo como a pilha deve ficar depois de rodar uma quotation:
{ 3 } [ 1 2 + ] unit-test
Isso roda [ 1 2 + ] e verifica se ele deixa 3 na pilha. Um array vazio, { }, significa que a quotation deve deixar a pilha vazia. A linha description opcional acima de um teste serve apenas para dar a ele um nome legível.
Para mais detalhes, consulte a documentação do Factor sobre testes unitários.