스팀 앱 개발기 #35 - 유닛 테스트용 WalletViewModelTest 클래스 구현 후 보이는 문제점
지난 포스트에서 보여 드린 WalletViewModelTest 클래스를 다시 한번 살펴보겠습니다.
// To test WalletViewModel class
class WalletViewModelTest {
@Rule
@JvmField
val instantExecutorRule = InstantTaskExecutorRule()
var walletViewModel = WalletViewModel()
companion object {
@JvmStatic
@BeforeClass
fun setUp() {
// Refer to https://medium.com/@jungil.han/junit-rxjava-%EA%B7%B8%EB%A6%AC%EA%B3%A0-%EC%BB%B4%ED%8C%A8%EB%8B%88%EC%96%B8-%EC%98%A4%EB%B8%8C%EC%A0%9D%ED%8A%B8-e8d17b674bdd
RxJavaPlugins.setIoSchedulerHandler {
Schedulers.trampoline()
}
RxAndroidPlugins.setInitMainThreadSchedulerHandler {
Schedulers.trampoline()
}
}
@JvmStatic
@AfterClass
fun teardown() {
RxJavaPlugins.reset()
RxAndroidPlugins.reset()
}
}
// Test case 1: Trying to get the wallet of a valid account.
@Test
fun readSteemitWallet_case1() {
walletViewModel.readSteemitWallet("dorian-mobileapp").subscribe { steemitWallets ->
assertEquals("dorian-mobileapp", walletViewModel.steemitWallet.value?.account)
}
}
// Test case 2: Trying to get the wallet of an invalid account.
@Test
fun readSteemitWallet_case2() {
walletViewModel.readSteemitWallet("invalid10293845").subscribe { steemitWallets ->
assertEquals("", walletViewModel.steemitWallet.value?.account)
}
}
}
문제 1 - ViewModel 클래스 추가 후 테스트 코드 작성시 중복 코드
지금 당장 오류가 있는 것은 아닙니다. 문제는요. 앞으로 수많은 ViewModel 클래스들을 만들고 이들을 테스트해야 하는데요. 테스트 클래스들을 만들 때마다 setUp, teardown 메소드들을 추가해야 합니다. 중복 코드가 들어가는 거죠. 그렇게 개발하는 것은 옳지 않습니다. 효율적인 개발을 위해 우리는 중복 코드를 최소화해야 합니다.
문제 2 - companion object 안에 정의된 setUp, teardown 메소드들
문제 1은 공통 클래스를 만들어 해결하고자 합니다. 그런데 setUp, teardown 메소드들은 companion object 안에 정의되어 있습니다. 이들을 공통 클래스에 정의하면, 하위 클래스에서 이들을 활용할 수 있을까요? 이부분은 아직 몰라서 확인해봐야 합니다.
문제 1, 2를 어떻게 해결할지가 다음 포스트 주제가 되겠습니다.
지난 스팀 앱 개발기
- #34 - WalletViewModel 클래스에 스팀 지갑 정보 읽는 코드 작성
- #33 - 추가 리팩토링: 데이터 모듈의 데이터 클래스의 필드들에 nullable 적용
- #32 - 리팩토링: 데이터 클래스 이름 변경
- #31 - 도메인 모듈에서 정의하는 데이터 클래스들이 DTO 패턴을 따르는 것이 맞는가?
- #30 - 진도를 더 나가기 전에 리팩토링 고려 중
- #29 - 뷰모델, Repository 패턴 그리고 Use Case 패턴의 관계
- #28 - Use Case 패턴 적용
- #27 - Repository 패턴 적용
- #26 - condenser_api.get_accounts API로 받은 계정 자료를 SteemitWalletDTO 타입으로 변환하기
- #25 - SteemClient, SteemService 잘 작동하는지 유닛 테스트
- #24 - API 실행을 담당할 SteemService 인터페이스 정의
- #23 - condenser_api.get_accounts API 연동에 필요한 데이터 클래스 정의
- #22 - API 연동에 필요한 라이브러리 추가
- #21 - 사용자 지갑 정보를 담을 SteemitWallet 클래스 정의
- #20 - 클린 아키텍처를 위한 모듈 구성 (2)
- #19 - 클린 아키텍처를 위한 모듈 구성 (1)
- #18 - VEST로부터 STEEM POWER를 계산하는 방법
- #17 - VEST를 STEEM POWER로 변환하기 위해 필요한 get_dynamic_global_properties API
- #16 - 지갑 내용을 읽기 위해 필요한 API
- #15 - 지갑 서브화면(WalletFragment) 레이아웃 구성해 보기
- #14 - 지갑 서브화면(WalletFragment)에서 계정 인식하기
- #13 - 프로파일 서브화면(ProfileFragment)에서 계정 인식하기
- #12 - 태그 서브화면에서 태그 인식하기
- #11 - 검색 레이아웃을 메인 화면에 적용
- #10 - 태그 및 계정 검색 레이아웃 만들기
- #9 - BaseActivity 클래스 정의 그리고 MainActivity 클래스에 적용
- #8 - BaseFragment 클래스 정의 그리고 기존 프래그먼트들에 적용
- #7 - ProfileFragment 그리고 WalletFragment에 데이터 바인딩 적용
- #6 - 태그별 검색 내용을 보여줄 TagsFragment에 데이터 바인딩 적용
- #5 - GitHub에 소스 올리기
- #4 - 하단 내비게이션의 탭 관련 클래스 이름 수정
- #3 - 하단 내비게이션 바의 아이콘, 텍스트 수정
- #2 - 프로젝트 생성
- #1 - 시작하며...
[광고] STEEM 개발자 커뮤니티에 참여 하시면, 다양한 혜택을 받을 수 있습니다.
Upvoted! Thank you for supporting witness @jswit.