유닛 테스팅은 Assertions(해결하고자 하는 '주장')이라는 개념으로 이루어져 있습니다.
프로그래머들은 자신이 주장한 특정한 환경에서 주어진 값이 옳은지 여부를 해결하기 위한 Assertion을 내세우게 됩니다.
간단한 예로:
function square(x) { return x * x; }
위 함수에 대한 아주 단순한 유닛 테스트는 다음과 같이 적을 수 있습니다:
console.log(square(5) === 25);
-
만약 square라는 함수에 5라는 값을 input 값으로 넣었을 때 output 값이 25가 나오면 true를 반환합니다.
-
그러나 sqaure라는 함수에 5라는 값을 input 값으로 넣었을 때 output 값이 125가 나오면 false를 반환합니다.
Test frameworks
위에 잠시 살펴본 바와 같이 테스트를 처음 구성할 때 console.log를 사용해서 유닛 테스트를 하는 방식은 문제가 되지 않습니다. 분명 테스트를 하지 않고 완성된 코드를 실행하려는 습관보다 훨씬 더 좋은 습관입니다.
하지만 보다 더 전문적인 프로그래머들이라면 Assertion을 기반으로 한 프레임워크를 사용하여, 잘 구성된 테스트를 통해 발생한 문제들을 빠르게 대처할 수 있어야 합니다.
Assertion의 한가지 예를 들면 다음과 같습니다:
var output = square(5); expect(output).to.equal(25);
당장은 테스트 프레임워크에 대해 전부 이해할 필요는 없습니다.
비록 전문적인 프로그래머가 되는 첫걸음을 내딛는 과정일지라도, console.log를 찍는 것보다 assertion을 통해 테스트를 작성하는 것은 중요한 훈련이 될 것입니다. 다음과 같이 아주 쉬운 assertion을 구성해보세요:
function assertEqual(actual, expected, testName) { if (actual === expected) { console.log('passed'); } else { console.log('FAILED ' + testName + ': Expected ' + expected + ', but got ' + actual); } }
위와 같이 console.log를 직접 함수 내에 사용하지 않고, assertion 내에 사용할 수도 있습니다.
'TIL > TIL' 카테고리의 다른 글
How do I decide what to test? (unit test) (0) | 2020.01.15 |
---|---|
(unit test) Terminology note: Assertions are not unit tests! (0) | 2020.01.15 |
When should I unit test? (unit test) (0) | 2020.01.15 |
What's a "unit test"? (unit test) (0) | 2020.01.15 |
Testing, and the value thereof (unit test) (0) | 2020.01.15 |
comment