FIRST 원칙 [Unit test]

아이작·2022년 2월 26일
0

CS 공부

목록 보기
6/10

Unit test 란?

단위 테스트를 의미함으로서, 하나의 단위를 뜻한다. 즉, 하나의 "함수"에 대한 테스트가 단위 테스트이다.
이와 반대되는 개념은 통합테스트(Integration Test)라 한다.


Unit test [FIRST 원칙]

좋은 단위 테스트를 작성함에 있어서 FIRST 원칙이 있다.
이 원칙은 "왜 단위 테스트를 하는가" 와 관련있다.

개발 시간을 투자해서, 테스트코드를 구현하는 것은 분명 목적이 있다. 
그 목적은  "버그를 줄이고 코드 퀄리티를 높이는 것이다." 
----단위 테스트에 대한 자세한 설명은 참조 바람. 

이를 유념하고 원칙을 알아보자.

1. Fast 원칙

(너가 그렇게 빨라?) 단위 테스트는 빨라야한다.

말그대로 "단위"이지 않은가. 전체 프로그램을 동작하닌 것이 아닌 하나의 "단위"에 대한 테스트를
빨리하고 결과를 알고 싶은 것이다. 따라서 단위 테스트는 빨라야한다.

2. Isolation 원칙

단위 테스트는 각각의 테스트가 연관되지 않고, 고립되어야 한다. 즉 독립적이어야 한다.

하나의 테스트 코드가 다른 테스트코드의 실행 순서에 의존해서는 안된다.
테스트 코드가 서로 의존한다면, 실행 속도가 저하될 것이고 때에 따라서 동일한 결과를 보장하지 못한다.
따라서 단위테스는 고립되어야 한다.

3. Repeatable 원칙

단위테스트는 반복 가능해야한다.

반복적으로 테스트를 시행해도, 결과는 같아야 한다.
실행할때마다 결과가 달라진다면? ex) timestamp를 찍는 코드
이때는 범위를 두어서 테스트를 한다고 하지만, 좋은 테스트 코드는 아니라 한다.

4. Self-vaildating 원칙

단위테스트는 자체 검증 가능해야한다.

자체검증이란 무엇을 의미하는가.

자체 --> 개발자가 수동으로 print를 찍어서 비교하는 것이 아닌, 자동적으로 수행하는 것!
검증 --> 통과/실패의 결과가 나오는 것.

즉, 단위 테스트는 자체적으로 테스트의 결과를 도출해야한다.

5. timely 원칙

단위테스트는 적시에 작성해야한다.

여기서 적시는 테스트 하려는 코드 구현 이전을 말한다.

즉, 테스트코드는 실제 코드 구현보다 먼저 작성되어야한다. 이는 TDD(Test-driven-development)로 이어진다.

TDD 관련 장단점과 필요성에 대해서는 개발자마다 생각이 다르다.
따라서, 이 원칙은 TDD 한에서만 적용된다.

추가) Unit test 가이드라인

  1. public method 를 테스트한다.
  2. 테스트 결과에 영향을 미치는 의존성 객체는 Mocking 으로 처리한다.
  3. 디스크 관련 의존성은 가능한 피한다.
  4. 네트워크 관련 의존성은 피한다.

0개의 댓글