LoginSignup
0
1

More than 1 year has passed since last update.

Spekで詰まった際のあれこれ(livedataTest, mockk)

Last updated at Posted at 2022-07-07

はじめに

ほぼメモの殴り書きですが結構詰まったので個人用にまとめました。
他にも詰まったら更新していきたい

liveDataのテストを書きたい

LiveDataをあれこれする際にはメインスレッドで動かす必要があるようですがUnitTest内だとメインスレッドで実行されないのでだめのようです。
普通にUT書く際には以下を記述していましたがSpekで実行する場合は怒られました。

@Rule
@JvmField
var instantTaskExecutorRule = InstantTaskExecutorRule()
class TestArchTaskExecutor : TaskExecutor() {
    override fun executeOnDiskIO(runnable: Runnable) {
        runnable.run()
    }

    override fun isMainThread(): Boolean {
        return true
    }

    override fun postToMainThread(runnable: Runnable) {
        runnable.run()
    }
}
     beforeEachTest {
            ArchTaskExecutor.getInstance().setDelegate(TestArchTaskExecutor())
        }

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

右クリック実行がしたい

@RunWith(JUnitPlatform::class)を入れていなかった
エラー吐かれたらbuild.gradleを確認しましょう

dependencies {
    testImplementation 'org.jetbrains.spek:spek-api:${version}'
    testImplementation 'org.jetbrains.spek:spek-junit-platform-engine:${version}'
    testImplementation 'org.junit.platform:junit-platform-runner:${version}'
    testImplementation "org.jetbrains.kotlin:kotlin-reflect:${version}"
}

※Android studioのSpekFrameworkをInstallしても解決しました。

mockkを入れたら動かない

RunWithでなくSpekFrameworkで動かしていると下記エラーが起きてしまった際に解決した方法
java.lang.NoClassDefFoundError: io/mockk/proxy/MockKAgentFactory

//モックインスタンスの生成
        val mockService : MockService = mockk()
//下記のこっちだと動く
        val mockService = mockk<MockService>()
0
1
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
0
1