-
클린코드 - 깨끗한 테스트 코드 짜기✏️ 스터디 모음집/디자인 패턴 스터디 2022. 11. 5.
테스트 코드를 작성함에 있어서
F.I.R.S.T 규칙 이란?F : 빠르게 동작하는 테스트 코드
I : 독립적인 기능을 테스트하는 테스트 코드 → 기능(단위테스트라면, 함수)당 assert 하나!
R : 반복 가능한 테스트 코드
S : 여기저기 들어다 볼 필요 없이, 테스트 코드 만으로 자가 검증이 끝나는 테스트 코드
T : 실제 코드를 구현 하기 전에 적시에 테스트 코드를 작성하자
BUILD-OPERATE-CHECK 패턴 ?
깨끗한 테스트 코드는 가독성이 제일 중요하다!
BUILD : 테스트 자료를 만든다. // 보통 이 단계에서 목업 데이터를 만들거나, 테스트용 데이터 베이스에 데이터를 넣는다.
OPERATE : 테스트 자료를 조작한다. // 이 단계에서는 테스트 하고자 하는 시스템의 함수를 호출
CHECK : 조작의 결과를 확인한다. // 이 단계에서 assert 체크!
😱 안티 패턴
//use exposed API of the system you are testing to prepare a //scenario //BUILD CreateUserRequest request = buildCreateUserRequest(); UserDto user = client.createUser(request); UpdateUserRequest updateRequest = createUpdateUserRequest(user); //OPERATE client.updateUser(updateRequest); //CHECK UserDto userDto = client.getUser(request.getId()): assertUser(userDto, updateRequest);
BUILD, OPERATE, CHECK 단계에서 모두 테스트하려는 시스템(아래 예시 코드에서는 client)의 함수를 사용하는 경우
CHECK 단계에서는 OPERATE 조작의 결과를 확인하는데, 테스트 하려는 시스템(client)에 문제가 있을 경우, 여기저기에서 다 client 코드를 쓰고 있어서 OPERATE 에서 만 문제가 있는건지, 아니면 다른곳에서 문제가 발생 했는 지 알아차리기 쉽지 않음.
😃 안티 패턴 수정
테스트 하려는 시스템과, 아닌 시스템을 나누자!
//use repository layer of the system you are testing to prepare //a scenario //BUILD Organization organization = createDefault(); organizationRepository.save(organization); User user = createDefaultUserAccount(organization); userAccountRepository.save(organisation); //OPERATE client.updateUserAccount(updateRequest); //CHECK user = userAccountRepository.getUserAccount(user.getId()); assertUser(updateRequest, user);
위와 같이 레이어를 나누면
테스트 하려는 시스템(client)에 문제가 있을 경우,
CHECK 단계에서는 시스템(client) 함수를 사용하는 OPERATE 조작에서만 문제가 있구나! 라고 판단 할 수 있음출처
'✏️ 스터디 모음집 > 디자인 패턴 스터디' 카테고리의 다른 글
디자인 패턴 스터디 기록 (7) - 복합 패턴과 MVC (0) 2022.12.12 디자인 패턴 스터디 기록 (6) - 싱글톤 패턴 (0) 2022.11.02 디자인 패턴 스터디 기록 (5) - 팩토리 패턴, 의존성 역전 (0) 2022.11.02 디자인 패턴 스터디 기록 (4) - 데코레이터 패턴 (0) 2022.11.02 디자인 패턴 스터디 기록 (3) - 객체 간의 강한 결합 VS 느슨한 결합 (0) 2022.10.27