본문 바로가기

TDD, TestCode

단위테스트 AAA 패턴, FIRST, Right - BICEP, CORRECT

AAA 패턴

이는 테스트코드 작성시 다른사람도 이해할수 있게, 규격화되고 가독성을 향상시키는 패턴이다.

AAA 대신 Given - When - Then으로 부르기도 했지만 지금은 AAA 패턴이라고 하는게 유행(?)인듯 싶다.

 

Arrange(준비) : 테스트를 실행하기 전에 필요한 것들을 준비합니다. 예를 들어, 객체를 생성하거나, Mock 객체를 만들거나, 테스트 전에 호출되어야 할 API들을 호출하는 것들을 의미합니다

 

Act(실행): 테스트 코드를 실행합니다.

 

Assert(단언) : 실행한 코드가 예상한대로 동작했는지 확인합니다.

 

과거에는 테스트 코드에 주석을 달았으나, 최근에는 해당 패턴을 지킨다면

굳이 달지 않아도 된다고 한다.

 

하지만 크고 복잡한 테스트의 경우는 주석이나, 하나의 테스트를 작게 만들어서 관리하는게 

효율적이다. 테스트는 일종의 '문서화'임을 명심하자.

 

First원칙 

 

Fast : 느린것(fs, 네트워크 db) 에 대한 의존성을 낮춰야함. Mock 데이터 생성 등을 고려한다.

Isolate : 독립(고립)되어야 함

Repeatable : 반복해도 같은결과가 나와야 한다.

Self validating: 스스로 검증하기. 최근에는 CI/CD툴로 자동화가 가능하게 하는게 트렌드!

Timely / Thorough :당연히 배포하기 전에 작성해야(적당한 시점에)하고, 철저하게 작성해야

 

Right -BICEP

 

Right : 올바른 결과 추구

 

Boundary :  모든 코너 케이스(경계) 에 대한 테스트

예) 포맷 인풋, null, 특수문자, 잘못된 이메일, 작은숫자, 큰숫자, 중복, 순서가 맞지 않음 등...

 

Inverse relation : 역관계를 이용해서 확인

 

예) 5+5 = 10 이면 10 -5 = 5도 검증

 

Cross check 다른 수단을 이용해서 결과를 확인! 

예) 같은 알고리즘을 구현한 다른 라이브러리를 이용해 검증한다.

 

Error condition: 에러 케이스에 대해 테스트코드가 어떻게 동작하는지 확인한다.

 

Performance characterics

성능이 중요하면 테스트를 통해 데이터로 확인해야

 

Correct 원칙(코드 구현시에도 유용하다)

 

Conformance 특정 포맷을 준수하는가

Ordering 순서조건 확인하기

Range 숫자의 범위

 

Reference 외부의존성 유무 (특정 조건 유무)

예) A를 호출해 특정 상황이 되면 B를 호출할때

(생각보다 여기서 오류가 많이 나온다고 한다)

 

Existence 값이 없을때 테스트 null, undefined, 0 등...

 

Cardinality 0-1-N 원칙에 따라 검증

 

Time 상대시간, 절대시간 동시의 일 등등...

예) Timezone등을 고려

 

 

 

'TDD, TestCode' 카테고리의 다른 글

Mock 과 Stub 의 차이는?  (0) 2023.05.24
테스트코드 그거 좋다는데 언제 해야되나요?  (0) 2023.05.18