테스트 대역은 크게 목(목,스파이), 스텁(스텁,더미,페이크)로 나눌수있음
두 유형은 다음과 큰 차이점 존재
나머지 차이점은 미미한 구현 세부사항임
스파이는 목과 같은 역할 그러나 스파이는 수동작성하지만,
목은 프레임워크의 도움을 받아 생성
스텁 더미 페이크의 차이는 얼마나 똑똑한지에 있음
스텁:시나리오마다 다른값을 반환하게끔 구성할 수 있음(완전한 의존성)
더미:널값이나 가짜 문자열과 같이 단순하고 하드코딩된 값
페이크: 스텁과 비슷하지만 생성에 차이 존재(존재하지 않는 의존성을 대체하고자 구현)
Mock(도구)은 목(테스트 대역)이나 스텁을 만드는 데 사용할 수 있는 목 라이브러리 클래스이다
스텁과 상호 작용을 검증하면 취약한 테스트로 이어짐
명령 조회 분리(CQS) 원칙에 따르면, 모든 메서드가 명령 또는 조회 중 하나여야 하지만 둘다는 안됨(명령을 대체하는 테스트 대역은 목이며, 조회를 대체하는테스트 대역은 스텁임)
모든 제품 코드는 공개 API인지 비공개 API인지 식별할 수 있는 동작인지
구현 세부 사항인지라는 두 가지 차원으로 분류할 수 있음
코드의 공개성은 private, public, internal 키워드 등 접근 제한자에 의해 제어된다
다음 요구 사항을 하나라도 충족하면 식별할 수 있는 동작이다(둘다 아니면 구현 세부 사항)
잘 설계된 코드는 식별할 수 있는 동작이 공개 API와 일치하고 구현 세부 사항이 비공개 API 뒤에 숨겨져 있는 코드이다
(공개 API가 식별할 수 있는 동작 이상으로 커지면 코드는 구현 세부 사항을 유출)
캡슐화는 코드를 불변성 위반으로부터 보호하는 행위다
(클라이언트는 구현 세부사항을 사용해 불변성을 우회할 수 있기 때문에 구현 세부 사항을 노출하면 캡슐화가 위반되는 경우가 종종생김)
육각형 아키텍처는 상호 작용하는 애플리케이션의 집합이고 각 애플리케이션은 육각형으로 표시함
(각 육각형은 도메인과 애플리케이션 서비스라는 두 계층으로 구성)
육각형 아키텍처는 다음과 같이 세 가지 관점을 강조함
도메인과 애플리케이션 서비스 계층 간의 영향 분리
(도메인 계층은 비지니스 로직을 애플리케이션 서비스는 도메인 계층과 외부 애플리케이션 간의 작업을 조정)
애플리케이션 서비스 계층에서 도메인 계층으로의 단방향 의존성 흐름
(도메인 내 클래스는 서로에게만 의존해야하고, 애플리케이션 서비스 계층의 클래스에 의존해서는 안됨)
외부 애플리케이션은 애플리케이션 서비스 계층이 유지하는 공통 인터페이스를 통해 연결됨
(아무도 도메인 계층에 직접 액세스 할 수 없다)
육각형의 각 계층은 식별할 수 있는 동작을 나타내며 각각의 구현 세부 사항이 있다
애플리케이션에는 시스템 내부 통신과 시스템 간 통신이라는 두 가지 통신 유형 존재 (시스템 내부 통신은 애플리케이션 내 클래스 간의 통신,시스템 간 통신은 애플리케이션이 외부 애플리케이션과 통신할때를 말함)
시스템 내 통신은 구현 세부 사항이다 애플리케이션을 통해서만 접근할 수 있는외부 시스템을 제외하고 시스템 간 통식은 식별할 수 있는 동작이다.
애플리케이션을 통해서만 접근할 수 있는 외부 시스템과의 상호작용도 구현 세부 사항인데, 그 결과의 부작용은 외부에서 확인할 수 없기 때문이다
시스템 내 통신을 검증하고자 목을 사용하면 취약한 테스트로 이어진다
(따라서 시스템 간 통신과 해당 통신의 부작용이 외부 환경에서 보일 때만 목을 사용하는것이 타당함)
무슨말인지 모르겠는게 너무 많음..