LoginSignup
4
0

More than 5 years have passed since last update.

Spek2でLiveDataのテストをする

Posted at

そのまま実行するとLooperでエラーが出る

java.lang.RuntimeException: Method getMainLooper in android.os.Looper not mocked. See http://g.co/androidstudio/not-mocked for details.

TaskExecutorを継承したテスト用のクラスを作る

class TestArchTaskExecutor : TaskExecutor() {
    override fun executeOnDiskIO(runnable: Runnable) {
        runnable.run()
    }

    override fun isMainThread(): Boolean {
        return true
    }

    override fun postToMainThread(runnable: Runnable) {
        runnable.run()
    }
}

beforeEachTestでExecutorを差し替え、終わったらafterEachTestでnullに差し替える

object HogeViewModelTest : Spek({

    beforeEachTest {
        ArchTaskExecutor.getInstance().setDelegate(TestArchTaskExecutor())
    }
    afterEachTest {
        ArchTaskExecutor.getInstance().setDelegate(null)
    }

    Feature("機能") {
        Scenario("シナリオ") {
            lateinit var viewModel: HogeViewModel

            val observer = mockk<Observer<Int>>()

            Given("ViewModelの生成") {
                viewModel = createViewModel()
                viewModel.action.observeForever(observer)
            }

            When("なんかすると") {
                viewModel.onClick()
            }

            Then("値が変わる") {
                verify {
                     observer.onChanged(1)
                }
            }
        }

})
4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0