단위 테스트 스타일

Crow·2022년 8월 16일
0

Unit Testing

목록 보기
3/5
  • 단위 테스트 스타일 비교

  • 함수형 아키텍처와 육각형 아키텍처의 관계

  • 출력 기반 테스트로 전환

  • 출력 기반 테스트는 SUT에 입력을 주고 출력을 확인하는 테스트 스타일이다(이 테스트 스타일은 숨은 입출력이 없다고 가정시 SUT 작업의 결과를 반환하는 값뿐임)

  • 상태 기반 테스트는 작업이 완료된 후의 시스템 상태를 확인

  • 통신 기반 테스트는 목을 사용해서 테스트 대상 시스템과 협력자 간의 통신을 검증

  • 단위 테스트의 고전파는 통신 기반 스타일보다 상태 기반 스타일을 선호하며 런던파는 반대를 선호함( 두 분파 모두 출력 기반 테스트를 사용)

  • 출력 기반 테스트가 품질이 가장 좋다(이러한 테스트는 구현 세부 사항에 거의 결합되지 않아 리팩토링 내성이 존재하며 작고 간결하여 유지 보수에 유리함)

  • 상태 기반 테스트는 안정성을 위해 더 신중해야 함
    (상태 기반 테스트는 출력 기반 테스트보다 유지 보수가 쉽지 않음 헬퍼 메서드와 값 객체를 사용해 유지 보수성 문제를 완화할 수도 있지만 제거는 불가능)

  • 단위 테스트를 하려면 비공개 상태를 노출하지 않도록 해야함

  • 통신 기반 테스트 역시 안정성을 위해 신중해야함 (앱 경계를 넘어서 외부 환경에 부작용이 보이는 통신만 확인해야함)

  • 통신 기반의 유지 보수성은 출력 기반 테스트 및 상태 기반 테스트와 비교할 때 좋지 않음(목은 공간을 많이 차지하는 경향이 있어서 테스트 가독성이 떨어짐)

  • 함수형 프로그래밍은 수학적 함수로 된 프로그래밍임
    (수학적 함수는 명시적이므로 테스트 용이성을 상당히 높인다)

  • 수학적 함수는 숨은 입출력이 없는 함수(또는 메서드)이며 부작용과 예외가 숨은 출력에 해당함(내부 상태 또는 외부 상태에 대한 참조는 숨은 입력에 해당함)

  • 함수형 프로그래밍의 목표는 비즈니스 로직과 부작용을 분리하는것임

  • 함수형 아키텍처는 부작용을 비즈니스 연산의 가장자리로 밀어내 분리를 이루는데 도움을 줌
    (해당 방법으로 부작용을 다루는 코드를 최소화하면서 순수 함수 방식으로 작성된 코드의 양을 최대화 가능)

  • 함수형 아키텍처는 모든 코드를 함수형 코어와 가변 셸이라는 두 가지 범주로 나눔
    (가변 셸은 입력 데이터를 함수형 코어에 공급하고, 코어가 내린 결정을 부작용으로 변환)

  • 함수형 아키텍처와 육각형 아키텍처의 차이는 부작용의 처리에 있다
    함수형 아키텍처: 모든 부작용을 도메인 계층 밖으로 밀어냄
    육각형 아키텍처: 도메인 계층에만 한정돼 있는 한은 도메인 계층에 의해 만들어진 부작용도 괜찬음

  • 함수형 아키텍처와 전통적인 아키텍처 사이의 선택은 성능과 코드 유지 보수성 사이의 절충이며,
    함수형 아키텍처는 유지 보수성 향상을 위해 성능을 희생함

  • 모든 코드베이스를 함수형 아키텍처로 전환할 수는 없다
    따라서 함수형 아키텍쳐를 전략적으로 적용해야한다

  • 시스템 복잡도와 중요성을 고려하라
    (코드베이스가 단순하거나 그렇게 중요하지 않으면, 함수형 아키텍처에 필요한 초기 투자는 별 효과가 없다)

profile
어제보다 개발 더 잘하기 / 많이 듣고 핵심만 정리해서 말하기 / 도망가지 말기 / 깃허브 위키 내용 가져오기

0개의 댓글