본문 바로가기
스터디-공부/테스트

5장 목과 테스트 취약성 (2)

by jonghoonpark 2023. 5. 12.

단위테스트 (블라디미르 코리코프)

5장 목과 테스트 취약성 (1)

에서 이어지는 글입니다.

1.2 도구로서의 목과 테스트 대역으로서의 목

Mock은 두가지 의미가 있다.
목 라이브러리(mocking library)의 클래스도 목으로 부르며
테스트 대역으로서의 목 도 있다.

1.3 스텁으로 상호 작용을 검증하지 말라

테스트에서 거짓 양성을 피하고 리팩터링 내성을 향상시키는 방법은 구현 세부 사항이 아니라 최종 결과(이상적으로 비개발자들에게 의미가 있어야 함)를 검증하는 것 뿐이다.

최종결과가 아닌 사항을 검증하는 것을 과잉 명세(overspecification)이라고 부른다.

1.4 목과 스텁 함께 쓰기

같이 사용할 수 있다.

1.5 목과 스텁은 명령과 조회에 어떻게 관련돼 있는가?

명령 조회 분리 (CQS, Command Query Seperation) 에 따르면
모든 메서드는 명령이거나 조회여야 하며, 이 둘을 혼용해서는 안된다.

 

명령은 사이드 이펙트를 일으키고 어떤 값도 반환하지 않는 메서드(void 반환)다.
조회는 그 반대로 사이드 이펙트가 없고 값을 반환한다.
* 사이드 이펙트의 예로는 객체 상태 변경, 파일 시스템 내 파일 변경 등이 있다.

메서드가 사이드 이펙트를 일으키면 해당 메서드의 반환 타입이 void인지 확인하라.
메서드가 값을 반환하면 사이드 이펙트가 없어야 한다.
질문 할 때 답이 달라져서는 안된다.

 

항상 CQS 원칙을 따를 수 있는건 아니다. 그래도 가능하면 CQS 원칙을 따르는 것이 좋다.

명령을 대체하는 테스트 대역은 목이다. 조회를 대체하는 테스트 대역은 스텁이다.

댓글