얼쑤의 성취도 화면은 곡을 처음부터 끝까지 연주해 채점을 마친 기록을 비교합니다. 조회 SQL은 세션에 평가 행이 있는지, 세션 상태가 DONE인지, 연주 구간이 악보의 첫 음부터 마지막 음까지인지 확인합니다. 실제 MySQL에 데이터를 넣고 HTTP로 조회하는 테스트도 통과했습니다. 화면에서 왜 같은 조건의 연주를 고르는지는 점수 비교 글에 정리했습니다. 같은 조건의 연주만 비교한 이유
독립 리뷰에서 SQL 조건을 일부러 빼 보니 예상과 달랐습니다. 완료 상태를 확인하는 조건이나 시작 음을 확인하는 조건을 빼도 테스트는 계속 통과했습니다.
여러 조건이 같은 행을 걸러냈다
테스트 DB에 FAILED 세션은 있었습니다. 그런데 그 세션에는 평가 행이 없었습니다. 상태 조건을 없애도 평가 테이블과 조인하는 단계에서 이미 제외됐습니다. 실패 세션이 조회되지 않는다는 결과만 보고 상태 조건이 검사됐다고 생각하기 쉬웠습니다.
부분 연주도 비슷했습니다. 기존 데이터에는 첫 음을 건너뛰고 마지막 음까지 연주한 세션이 없었습니다. 시작 음 조건을 빼도, 마지막 음 조건을 통과해 잘못 들어올 행이 없었습니다.
| 보호할 조건 | 기존 테스트가 통과한 이유 | 추가한 테스트 데이터 |
|---|---|---|
상태가 DONE | 실패 세션에 평가 행이 없어 조인에서 제외됨 | 평가가 있으며 다른 조회 조건은 맞는 FAILED 세션 |
| 첫 음부터 연주 | 부분 연주가 마지막 음 조건도 만족하지 않음 | 첫 음을 건너뛰고 마지막 음까지 간 고득점 세션 |
한 조건에서만 걸리는 행 추가
두 데이터를 추가하자 정상 쿼리에서는 둘 다 제외됐습니다. 이어 DONE 조건을 뺀 쿼리와 시작 음 조건을 뺀 쿼리를 각각 실행하니 두 변형 모두 통합 테스트에서 실패했습니다. 곡별 최고점에서 잘못 포함된 연주가 눈에 띄도록 추가한 세션의 점수를 높게 잡았습니다. 조회 규칙은 그대로 두고, 조건 하나가 빠졌을 때 응답이 달라지는 데이터로 바꿨습니다.
여러 조건이 같은 행을 걸러내는 쿼리라면, 각 조건마다 다른 조건은 모두 통과하는 행을 하나 만들어 볼 수 있습니다. 그 조건 하나를 빼도 결과가 같다면, 테스트가 보호하는 범위를 다시 확인할 단서가 됩니다.

댓글
댓글과 반응은 GitHub 계정으로 로그인해 남길 수 있어요.