[test] 테스트

lim1313·2022년 3월 29일
0

TIL

목록 보기
21/22

테스트 피라미드

테스트 원칙

🥑 테스트 코드 주의

  1. 한번 작성된 테스트 코드는 영원히 유지보수 해야한다. => clean code
  2. 테스트 코드에서는 내부 구현사항을 테스트하면 안된다.
  3. 재사용성을 높이기 (테스트 유틸리티)
  4. 배포용 코드와 철저히 분리
  5. 테스트코드를 통한 문서화 => 테스트코드는 문서화의 효과도 있다

🥑 좋은 테스트의 구조

  • 모든 테스트 코드는 의도적으로 실패할 수 있어야 한다.
  • 하나의 테스트 코드에서 너무 많은 테스트를 실행하면 안된다.

버그가 있는 경우 => 버그에 의해 실패하는 테스트 코드를 작성하여 어떤 경우에 실패하는지 확인(의도적으로 실패) => 해당 테스트 코드를 통과하기 위해 버그 수정


무엇을 테스트해야하는가?

🥑 1. FIRST

Fast

느린것에 대한 의존성 낮추기

파일, 데이터베이스 접근, 네트워크 사용으로 해당 요소에 의존하게 된다면 테스트 코드가 느려질 수 있고, 테스트코드가 불안정하다.

의존성 낮추기 위해 mock, stub을 활용할 수 있다.

Isolated

최소한의 유닛으로 검증하기
독립적이고, 집중적으로 유지
하나의 테스트에서 너무 많은 것을 동시에 테스트하는 것은 지양

Repeatable

실행할 때마다 동일한 결과를 유지

다른 테스트 코드에 의존하거나, 네트워크와 같은 외부적인 환경에 의존하는 테스트 코드는 지양

테스트 코드는 환경에 영향을 받으면 안된다.

Self-validating

스스로 결과를 검증하기
ex) jest-> toBe, toEqual

자동화를 통한 검증단계(CI/CD)
repo에 새로운 테스트가 추가된다면 자동으로 모든 테스트가 실행되어 기존에 영향을 주지 않는지, 실패하는 테스트는 없는지 확인할 수 있도록 하는 것도 좋다.

Timely

시기적절하게 테스트 코드 작성
사용자에게 배포되기 이전에 테스트 코드 작성

🥑 2. Right-BICEP

모든 요구 사항이 정상 동작 하는지 확인
모든 결과가 정확한지 확인

Boundary conditions => Correct 원칙(하단 참고)

모든 코너 케이스에 대해 테스트를 하기

ex) 학생 수에 대해 테스트를 한다면 => 0명, 100명, 더 많은 학생들이 있을 때

잘못된 포맷의 인풋, null, undefined, 중복값일 경우, 특수문자, 잘못된 이메일, 작은 숫자, 큰 숫자, 중복, 순서가 맞지 않을 때 등등

Inverse relationship

역관계를 적용해서 결과값을 확인

일관성 유지
ex) 5 + 5가 10인 것을 확인한 다면, 10 - 5가 5인 것을 확인할 수 있어야 한다.
ex) 배열에 학생 A를 추가했을 때, A를 다시 제거하면 이전의 배열과 동일해야 한다.

Cross-check

다른 수단을 이용해서 결과값이 맞는지 확인

추가된 과일 == 전체과일 - 예전의 과일 갯수
A 알고리즘 == B 알고리즘

Error conditions

불행한 경로에 대해 우아하게 처리 하는가?

네트워크 에러, 메모리 부족, 데이터베이스 중지 등의 에러가 있을 때 정상적으로 동작하는지.

Performance characteristics

성능 개선의 척도와 확인도 데이터를 통해 확인

🥑 3. CORRECT

Conformance

특정 포맷을 준수하는가
인풋이 포맷에 적합할 때, 적합하지 않을 때, 이상한 포맷일 때 코드가 어떻게 동작하는지 예상하는 테스트를 작성해야 한다.

전화번호, 이메일, 아이디, 파일 확장자...

Ordering

순서 조건 확인하기
순서가 중요한 경우, 순서가 잘못되어 있을 때 어떻게 동작하는지 예상하는 테스트 작성

Range

숫자의 범위
제한된 범위보다 작거나 큰 경우

Reference

외부 의존성 여무, 특정한 조건의 유무

~일때, ~가 되어 있을 때, 어떤 특정한 상황/상태가 조건으로 있을 때, 만약 이러한 조건이 충족되지 않고 실행된다면 어떻게 되는지
우리가 가정하고 있는 상황이 아닐 때 어떻게 동작하는지.

Existence

값이 존재하지 않을 때 어떻게 동작하는지

null, undefined, ' ', 0

Cardinality

0-1-N 법칙에 따라 검증

목록이 하나도 없을 때, 하나만 있을 때, 여러개가 있을 때 어떻게 동작하는지.

Time

상대, 절대, 동시의 일들

순서가 맞지 않은 경우, 소비한 시간, 지역 시간이 서로 상이할 경우 어떻게 동작하는지

profile
start coding

0개의 댓글