테스트할 때는 가급적이면 클라우드 서비스를 사용하지 않습니다. 클라우드는 균일한 환경을 제공해주지만 프로비저닝 시간, 디버그 가능성 및 접근 등에서 오픈 소스 프로젝트에 대해 사용자가 자격 증명을 제공해야 하는 등 신경 쓸 부분이 많아집니다. 물론 CI에서도 테스트해야 합니다.
¦ 테스트를 결정론적으로 만들어라 ¦
때때로 애플리케이션에서 레코드 출력 순서는 중요하지 않습니다. 그러나 테스트 출력을 안정적으로 만들기 위해 필드 정렬 단계가 필요할 수 있습니다.
어떤 알고리즘은 무작위성을 이용합니다. 예를 들어 클러스터링 알고리즘은 후보 이웃을 무작위적으로 선정합니다. 워커의 연산 수행 순서가 비결정적인 분산 환경에서는 흔히 하듯 시드seed를 설정해도 소용없습니다. 이런 경우에는 테스트 파이프라인에서 그 부분을 단일 워커로 실행하거나, 데이터 파티션마다 시드를 넘기는 방법을 고려해볼 수 있습니다.
출력에 가변 시간 필드를 넣지 마세요. 고정된 입력을 넣으면 가변 필드를 사용하지 않을 수 있습니다. 그게 아니라면 실제가 아닌 가짜 시간 값을 넘기거나, 출력을 후처리하는 과정에서 시간 필드를 제거하세요. 어떻게 해도 잘 되지 않는다면 엄격한 동등성 검사를 하기보다는 유사한 정도로만 출력 일치를 판단하세요.