Help us understand the problem. What is going on with this article?

MockKでsuspend functionをモックした際にMockKExceptionが発生したのでメモ

More than 1 year has passed since last update.

MockKはKotlinフレンドリーなMockingライブラリです。特徴はこちらにまとめられていますが、その一つにmocking coroutinesがあげられています。

suspend functionのmocking

MockKを利用することでsuspend functionについても簡単にモックを作成できます。例えば次のようなinterfaceが定義されていて、Result型を返すとします。

sealed class Result {
    data class Success(val value: String) : Result()
    data class Failure(val exception: Exception) : Result()
}

interface UseCase {
    suspend fun execute(): Result
}

この場合次のようにモックを作成し、coEveryを使用することでsuspend functionであるexecuteの戻り値を明示的に指定できます。

val mock: UseCase = mockk {
    coEvery { execute() } returns Result.Success("success")
}

io.mockk.MockKException: Add coroutines support artifact…

coEveryを使用したテストを実行すると次のようなエラーが表示されテストが失敗します。

io.mockk.MockKException: Add coroutines support artifact 'org.jetbrains.kotlinx:kotlinx-coroutines-core' to your project 

Add coroutines support artifact 'org.jetbrains.kotlinx:kotlinx-coroutines-core' to your projectとありますが、既にプロジェクトに追加済みの場合でもこのエラーは発生します。

対処方法

MockKのバージョンに1.8.13.kotlin13を指定することで上記の問題を回避できます。dependenciesでの定義は次のようになります。

testImplementation 'io.mockk:mockk:1.8.13.kotlin13'
testImplementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.0.1'

こちらのissueを見つけて無事解決できました。1

https://github.com/mockk/mockk/issues/151


  1. 後から気づいたのですが、READMEには1.8.13.kotlin13がcurrentとしっかり書いてあるのでREADMEをとちゃんと読もう!という話だったりします。 

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away