Testar no percurso de Factor

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.

Um teste de cada vez

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.

Quando os testes passam

O executor imprime cada teste que executou e termina em silêncio:

Unit Test: { { f } [ 2015 leap-year? ] }

Quando um teste falha

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.

Ler um teste

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.