• 카테고리

    질문 & 답변
  • 세부 분야

    모바일 앱 개발

  • 해결 여부

    해결됨

Repository test 관련해 질문이 있습니다.

22.10.17 20:00 작성 조회수 135

0

안녕하세요! 강사님 덕분에 플러터 공부를 재미있게 하고 있는 수강생입니다. 다름이 아니라 클린 아키텍쳐를 이용하여 개인 프로젝트를 만들고 있는데 repository 테스트 코드를 만들다가 궁금한 점이 생겨 질문을 남깁니다.

  1. 현재 주식 앱처럼 리턴 타입이 Result인 Repository를 테스트 해도 되나요? 테스트 하려면 어떤 식으로 접근해야 할까요? 제가 이해한 바로는 Result 클래스는 viewmodel에서 성공 및 실패에 따라서 state를 다르게 적용하기 위해 만들어진 것인데 테스트 코드에서는 state가 따로 없어서 어떤 식으로 성공을 정의할지 잘 모르겠습니다. (hive를 통한 로컬 db 테스트 코드는 만들어진 상태입니다.)

     

  2. 1번과 이어지는 질문인데요, 레이어마다(데이터, 도메인, 프레젠테이션) dao, repository, viewmodel이 데이터를 다루는 역할을 하는데, 이것들의 테스트 코드를 만드는 게 맞을까요? 현재 계획은 위 세 개에 대한 테스트 코드, 위젯에 대한 테스트 코드를 만드려고 합니다. 혹시 잘못된 부분이나 또 필요한 테스트가 있다면 알려주시면 감사하겠습니다.

앞으로도 강의 많이 만들어주세요! 매번 새롭게 배우고 있습니다. 감사합니다ㅎㅎ

답변 1

답변을 작성해보세요.

1

먼저 강의가 도움이 많이 되셨다니 다행입니다.

1번 답변 :

Result 클래스의 특정 용도가 따로 있는 것은 아닙니다. 결과를 Null 이 아닌 어떤 값으로 랩핑하기 위한 용도라서 필요한 곳에서 사용하면 됩니다. 테스트 코드 작성도 당연히 문제 없습니다.

RepositoryImpl 테스트를 위해서는 StockDao, StockApi 에 의존성이 있기 때문에 먼저 이 둘을 Mock 객체로 만들어야 합니다. 따라서 StockDao, StockApi는 abstract class 로 둘 다 만들어 놓고 구현하는 식으로 변경해야겠지요. 이 두 객체의 동작을 모두 임의로 정의하여 테스트하면 됩니다.

2번 답변 :

테스트 코드는 최대한 만드는게 좋습니다. 이러한 습관은 특히 팀 프로젝트에서 빛을 발합니다. 제 경험에 비추어보면 테스트 코드를 작성함으로써 남이 수정한 코드에 영향을 받아 내가 작성한 코드가 제대로 동작 안 하는 것을 조기에 발견하기 위한 자기 방어 수단도 됩니다. 특정 버전에서 제 코드 반영 이후에 앱이 죽는다고 하여 주말에 출근을 했더니 결국 범인은 다른 사람인 경우가 많습니다.

데이터 베이스 관련된 부분이나 Api, Dao등 여러 객체가 엮여있는 Repository 의 경우에는 거의 테스트 코드가 필수라고 볼 수 있겠습니다.

현업에서 일할 때 앱에서 DB 쪽 테스트 코드만 거의 100개 정도 짠 것 같습니다. 남들이 기능 수정, 추가하면서 기능 변경하면서 DB 스키마를 건드리면서 테스트가 깨집니다. 테스트 코드 없었으면 버그 찾기 정말 힘들었을 겁니다.

말씀하신 대로 제 프로젝트의 Repository에 의존성이 있는 dao를 abstract class로 변경하고, mockito를 이용해 mock_dao를 주입해서 결과 타입을 isA로 비교하는 것으로 하였습니다.

혼자서 처음 해보는 클린 아키텍쳐 프로젝트라 어떤 방향으로 갈지 고민이 많이 됐었는데, 말씀하신 대로 테스트 코드를 짜면서 만들어가는 습관을 들이는 것이 좋을 같아서 계속 그렇게 진행해보려고 합니다. 친절한 답변 감사합니다!