- 테스트 코드는 실제 코드의 유연성, 유지보수성, 재사용성을 보존하고 강화한다.
- 표현력을 높이고 간결하게 정리하라.
- 테스트 API를 구현해 도메인 특화 언어를 만들라.
과거와는 달리 애자일과 TDD로 인해 단위 테스트를 자동화할 수 있게 됐다.
TDD 법칙의 세가지
실패하는 단위 테스트를 작성할 때까지 실제 코드를 작성하지 않는다.
컴파일은 실패하지 않으면서 실행이 실패하는 정도로만 단위 테스트를 작성한다.
현재 실패하는 테스트를 통과할 정도로만 실제 코드를 작성한다.
깨끗한 테스트 코드 유지하기
테스트 코드가 지저분할 수록 변경하기 어려워진다.
그렇다고 테스트 슈트를 없애면 안전성을 확인할 수 없고 결함이 생기게 된다.
: 테스트 케이스가 있으면 변경이 쉬워진다.
: 테스트 코드가 지전분하면 변경 능력이 떨어지고, 코드 구조를 개선하는 능력도 떨어진다.
깨끗한 테스트 코드 - “가독성”
명료성, 단순성, 풍부한 표현력이 필요하다.
도메인에 특화된 테스트 언어(DSL) rf. Domain-specific Language : 도메인 특화 언어는 관련 특정 분야에 최적화된 프로그래밍 언어입니다. DSL은 해당 분야 또는 도메인의 개념과 규칙을 사용합니다.
이중 표준 :
실제에서는 옳지 않은 방식이지만, 테스트 환경에서는 문제가 없는 방식들 단순하고 간결하고 표현력이 풍부해야하지만, 실제만큼 효율적인 필요는 없다.
테스트당 assert 하나
장점 : 결론이 하나라 이해하기 쉽다.
assert가 여러 개라면 메소드를 분리할 수 있다.
또는 Template Method 패턴 : 템플릿 메소드 패턴이란 특정 작업을 처리하는 일부분을 서브 클래스로 캡슐화하여 전체적인 구조는 바꾸지 않으면서 특정 단계에서 수행하는 내용을 바꾸는 패턴
테스트당 개념 하나
F.I.R.S.T
Fast | 빠르게 - 테스트는 빨리 돌아야한다. |
---|---|
Independent | 독립적으로 - 각 테스트는 서로 의존하지 않아야 한다. |
Repeatable | 반복 가능하게 - 어떤 환경에서도 반복 가능해야한다. |
Self-Validating | 자가 검증하는 - 테스트는 boolean으로 결과를 내야한다. (성공 or 실패) |
Timely | 적시에 - 텍스트는 적시에 작성해야한다. |