Skip to content

[Chore] Room DAO 테스트 기반 추가와 전송 대기 행 쿼리 검증 #596

Description

@edv-Shin

어떤 기능인가요?

Room DAO의 SQL이 한 번도 실행되지 않은 상태입니다. ExerciseRecordLocalDataSourceTest는 DAO를 목킹해 호출 인자만 검증하고, 실제 DB를 띄우는 테스트는 없습니다.

#583이 DAO 테스트를 미룰 때 근거로 적은 것은 두 가지였습니다. 메모리 DB를 단위 테스트에서 열려면 Robolectric이 필요하고, CI가 testDebugUnitTest만 실행해서 androidTest에 두면 아무도 돌리지 않는다는 것입니다. 그리고 그때 미룬 조건이 "타이머와 CRUD 단계에서 다시 넣는다"였습니다. 지금 그 단계입니다.

앞으로 들어올 쿼리는 전송 대기 행 보존과 syncState 전이입니다. 틀려도 화면에 드러나지 않고 사용자가 오프라인에서 만든 데이터가 조용히 사라지는 종류입니다.

실행 위치는 단위 테스트로 둡니다. androidTest에 두면 #583이 지적한 문제가 그대로 반복됩니다. 비용은 Robolectric 의존성과 data 모듈 테스트 실행 시간 증가입니다.

현재 상태는 이렇습니다. 버전 카탈로그에 Robolectric이 없고, 라이브러리 컨벤션 플러그인은 단위 테스트에 junit, mockk, coroutines-test, turbine, arch-core-testing, truth만 넣습니다.

이 이슈는 테스트 기반과 지금 있는 쿼리 검증까지입니다. 타이머 DAO와 운동 기록 쓰기 DAO 테스트는 각 이슈에서 이 기반 위에 올립니다. 마이그레이션 테스트용 androidx-room-testing은 스키마 정책 이슈에서 함께 넣습니다. 지금은 쓸 곳이 없습니다.

작업 상세 내용

  • 버전 카탈로그에 Robolectric 추가
  • data 모듈 단위 테스트에서 Robolectric 실행 설정
  • ExerciseCountDao 날짜 범위 조회 검증 (경계 날짜 포함)
  • ExerciseRecordDao 계정 조건 검증. 다른 memberId 행이 조회되지 않음
  • getListByDateDELETE_PENDING 행을 제외하는지 검증
  • replaceSyncedListByDate의 대기 행 보존을 실제 DB로 검증
  • 기록 삭제 시 목록과 상세가 함께 지워지는지 검증
  • Robolectric 도입 뒤 data 모듈 테스트 실행 시간 확인
  • 기존 목킹 테스트를 남길지 실제 DB 테스트로 대체할지 PR에서 선택

참고할만한 자료(선택)

오프라인 기능 지원 설계 문서 자동 테스트 절의 DAO 항목과 #583의 "DAO 테스트를 미뤘습니다" 절이 근거입니다. #593에서 data 모듈 단위 테스트가 하나 더 늘었습니다.

후속으로 #585의 경계 날짜 테스트, 타이머와 운동 기록 쓰기의 상태 전이 테스트, 스키마 재생성 정책 검증이 이 기반을 씁니다.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions