Testes na trilha de Factor

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.

Um teste de cada vez

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.

Quando os testes passam

O executor imprime cada teste que rodou e sai em silêncio:

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

Quando um teste falha

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.

Lendo um teste

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.