GitHubのWebページでリポジトリ内のファイルに含まれる文字列をGrep(あいまい検索)する方法です。 Grepしたい まじまじとコードを見始めるとGrepを使いたくなる時がありますが、Go to…
テスト用ライブラリのMockKを用途から索引できるようにまとめます。
classをmockにして戻り値で受け取る
Docs: DSL examples
classとして宣言しているファイルをmockし、mockされたインスタンスを受け取ります。
受け取ったmockインスタンスをテスト実行するコードに引数で渡して使用する場合に使います。
class Person { fun getName() : String { return "Ichiro" } } val person = mockk<Person>() every { person.getName() } returns "Jiro"
テストコード内でインスタンス生成するclassをmockする
Docs: Constructor mocks
classとして定義しており、プロジェクションコード内でインスタンス生成しているclassをmockにします。
class Person { fun getName() : String { return "Ichiro" } } val person = mockkConstructor(Person::class) every { anyConstructed<>(Person).getName() } returns "Jiro"
objectをmockする
Docs: Object mocks
Singletonで定義してくれるkotlinのobjectをmockにします。
object Person { fun getName() : String { return "Ichiro" } } val person = mockkObject(Person) every { Person.getName() } returns "Jiro"
拡張関数をmockする
Docs: Extension functions
Stringクラスに .ToJson()
などと関数を追加できる拡張関数をmockにします。
class Person { fun getName() : String { return "Ichiro" } } --- fullpath: pkg.application.util.test.kt fun Person.getAge() : Int { return 20 } --- val person = mockkStatic("pkg.application.util.testkt") every { Person.getAge() } returns 30
private関数をmockする
Docs: Private functions mocking / dynamic calls
private関数をmockにしなければならない場合は recordPrivateCalls
引数に true
を指定します。
class Person { fun getName() : String { return "Ichiro" } private fun anyPrivateFunc(name: String) : String { return name } } val person = mockk<Person>(recordPrivateCalls = true) every { person["anyPrivateFunc"](anyAny<String>()) } returns "Jiro" verify { person["anyPrivateFunc"](anyAny<String>()) }
mockを解除する
Docs: Top level functions
Constructor mockやStatic mock, Object mockは解除する必要があります。
テストケース実行後に自動的に元に解除されることはなく、mockに一致する関数を呼び出している場合にmockに置き換わります。
unmockkAll()
mockがcallされた回数を検証する
Docs: Capturing
mock関数がcallされた回数を検証します。
class Person { fun getName() : String { return "Ichiro" } } val person = mockk<Person>() every { person.getName() } returns "Jiro" verify { person.getName() }
verifyはmock関数が1回callされているか検証します。
mockがcallされた回数を検証する (詳細)
callされる回数やcallされる回数がN回以上、N回以下を指定して検証します。
class Person { fun getName() : String { return "Ichiro" } } val person = mockk<Person>() every { person.getName() } returns "Jiro" verify { person.getName() } // 1回 verify(exactly = 5) { person.getName() } // 5回 verify(exactly = 0) { person.getName() } // 0回 = 1回もcallされないこと verify(atLeast = 2) { person.getName() } // 2回以上 verify(atMost = 3) { person.getName() } // 3回以下
コメントを書く