Exercism에서 Factor 연습 문제를 테스트하는 방법을 배워요.
연습 문제를 다운로드하면 Exercism은 이를 하나의 독립된 폴더로 저장해요. 예를 들어 ~/exercism/factor/hello-world 같은 식이에요. 이 폴더 안에는 풀이가 담긴 하위 폴더와 테스트 러너가 담긴 하위 폴더가 있어요.
hello-world/
├── hello-world/
│ ├── hello-world.factor <- your solution
│ └── hello-world-tests.factor <- the tests
└── exercism-tools/ <- the bundled test runner
그 폴더의 최상위로 cd한 다음, 다음과 같이 테스트를 실행해요.
factor -roots=. -run=exercism-tools <exercise>
<exercise> 자리에는 연습 문제의 이름(폴더와 같은 이름)을 넣어요. 예를 들어 hello-world를 테스트하려면 이렇게 해요.
cd ~/exercism/factor/hello-world
factor -roots=. -run=exercism-tools hello-world
이 명령은 연습 문제 폴더의 최상위, 즉 <exercise>와 exercism-tools 하위 폴더를 모두 담고 있는 디렉터리에서 실행해요.
이 테스트는 제출할 때 Exercism이 실행하는 것과 같은 테스트예요. 따라서 로컬에서 모두 통과하면 제출할 준비가 된 거예요.
각 연습 문제는 처음에는 첫 번째 테스트만 활성화되어 있어요. 나머지 테스트는 <exercise>-tests.factor 파일의 STOP-HERE 줄로 막아 두는데, 테스트 러너는 그 아래에 있는 내용을 모두 무시해요.
"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
첫 번째 테스트를 통과시킨 다음, STOP-HERE를 다음 테스트 아래로 옮기고(또는 줄을 지워서 모든 테스트를 활성화하고) 테스트를 다시 실행해요. 모든 테스트가 통과할 때까지 이렇게 파일을 차례로 진행해요.
제출할 때는 Exercism의 테스트 러너가 STOP-HERE를 무시하고 모든 테스트를 실행하니, 제출하기 전에 모든 테스트가 통과하는지 꼭 확인해요.
테스트 러너는 실행한 각 테스트를 출력하고 조용히 종료해요.
Unit Test: { { f } [ 2015 leap-year? ] }
테스트 러너는 해당 테스트를 보여준 다음, 기대한 값과 여러분의 코드가 만들어 낸 값을 함께 보여줘요.
Unit Test: { { f } [ 2015 leap-year? ] }
--> test failed!
###FAIL_BEGIN###
leap/leap-tests.factor: 5
=== Expected:
f
=== Got:
t
###FAIL_END###
여기서는 테스트가 2015 leap-year?를 실행해 스택에 f가 있기를 기대했지만 t가 나왔어요.
테스트는 unit-test로 작성하는데, 이는 쿼테이션을 실행한 뒤 스택이 어떤 모습이어야 하는지 설명하는 배열을 받아요.
{ 3 } [ 1 2 + ] unit-test
이 코드는 [ 1 2 + ]를 실행하고 스택에 3이 남는지 확인해요. 빈 배열 { }는 쿼테이션이 스택을 빈 채로 끝내야 한다는 뜻이에요. 테스트 위에 선택적으로 붙는 description 줄은 테스트에 읽기 쉬운 이름을 붙여 줄 뿐이에요.
더 자세한 내용은 Factor의 단위 테스트 문서를 참고해요.