위키득계정 ↗
기술

Go-cmp

Go-cmp기술
분야
값 비교
언어
Go
대표 패키지
cmp
설정
비교 함수와 필드 정책
Go-cmp는 Go 값의 의미적 동등성을 테스트에서 비교하는 라이브러리다. 기본 재귀 비교에 사용자 정의 비교나 타입의 Equal 메서드를 반영해 기대한 동등성 기준을 표현한다.

동등성의 기준 정하기

두 값이 같다는 뜻은 테스트 목적에 따라 달라질 수 있다. 내부 표현이 같아야 하는지 관찰 가능한 의미가 같아야 하는지부터 정해야 한다. Go-cmp는 기본 비교가 맞지 않는 경우 비교 함수를 지정할 수 있다. 예를 들어 수치의 허용 오차 같은 정책은 요구사항에 맞게 선택해야 한다.

타입과 재귀 비교

대상 타입의 Equal 메서드를 이용하거나 사용자 정의 비교를 적용할 수 있다. 그런 구성이 없으면 기본 종류를 재귀적으로 비교한다. 다만 비공개 필드는 기본으로 그대로 비교하지 않으며 적절한 옵션이 없으면 패닉이 발생할 수 있다. 무시할지 명시적으로 허용할지를 객체의 계약에 맞춰 결정한다.

검사 범위를 숨기지 않기

특정 필드를 제외하면 비교가 편해질 수 있지만 그 값의 변화도 검사에서 사라진다. 모든 차이를 없애는 설정보다 어떤 차이를 의미 있다고 보는지 설명할 수 있는 구성이 중요하다. 내부 필드에 의존한 비교는 구현 변경에 민감할 수 있다. 라이브러리의 비교 성공과 도메인 규칙의 정확성을 구분하고 중요한 사례는 별도 단언으로 보완한다.

관련 문서

Testify / Gomega / EqualsVerifier / Hamcrest