스팀 앱 개발기 #36 - 유닛 테스트로 구현한 WalletViewModelTest 클래스에서 공통 부분 추출하여 CommonPartOfViewModelTest 클래스 만들기

시작하며...

#34에서 구현한 WalletViewModelTest 클래스의 문제점을 #35에서 설명드렸구요. 이번 포스트에서는 그 문제점을 해결하기 위한 코드 개선을 진행하고자 합니다.


향후 발생할 코드 중복을 방지하기 위해 CommonPartOfViewModelTest 클래스 정의

모든 ViewModelTest 클래스들은 InstantTaskExecutorRule 객체를 필요로 하구요. 테스트가 시작될 때 WalletViewModelTest 클래스에서 구현된 setUp() 메소드와 teardown() 메소드도 필요로 합니다. 이와 같이 ViewModelTest 클래스들이 공통으로 사용할 코드는 CommonPartOfViewModelTest 클래스로 옮깁니다.

open class CommonPartOfViewModelTest {

    @Rule
    @JvmField
    val instantExecutorRule = InstantTaskExecutorRule()

    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()
        }
    }

}

WalletViewModelTest 클래스가 CommonPartOfViewModelTest 클래스를 상속 받음

뷰모델 클래스가 CommonPartOfViewModelTest 클래스를 상속받게 합니다. 그러면 뷰모델 클래스에서는 뷰모델 객체를 정의하고 테스트 메소드들을 작성하면 됩니다. 이를 적용한 결과는 아래와 같습니다. 테스트 본연의 코드들만 보이니 훨씬 깔끔해 보이지요.

class WalletViewModelTest : CommonPartOfViewModelTest() {

    var walletViewModel = WalletViewModel()

    // 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)
        }
    }

}

GitHub Commit


지난 스팀 앱 개발기

Sort:  
 2 years ago 

[광고] STEEM 개발자 커뮤니티에 참여 하시면, 다양한 혜택을 받을 수 있습니다.

Upvoted! Thank you for supporting witness @jswit.

Coin Marketplace

STEEM 0.26
TRX 0.11
JST 0.032
BTC 64555.14
ETH 3086.03
USDT 1.00
SBD 3.85