この文書の現在のバージョンと選択したバージョンの差分を表示します。
両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン | ||
android:junit [2019/12/03 01:08] ips |
android:junit [2019/12/04 01:26] (現在) ips [Hamkrest - Hamcrest for Kotlin] |
||
---|---|---|---|
ライン 2: | ライン 2: | ||
===== Hamkrest - Hamcrest for Kotlin ===== | ===== Hamkrest - Hamcrest for Kotlin ===== | ||
+ | |||
+ | Hamkrestはおそらく一番メジャーなMatcher。 | ||
[[https://github.com/npryce/hamkrest/blob/master/README.md|Hamkrest - Hamcrest for Kotlin]] | [[https://github.com/npryce/hamkrest/blob/master/README.md|Hamkrest - Hamcrest for Kotlin]] | ||
+ | com.natpryce.hamkrest → kotlin用のhamkrest | ||
+ | org.hamcrest. → 普通のhamkrest | ||
[[https://qiita.com/opengl-8080/items/e57dab6e1fa5940850a3|HamcrestのMatchersに定義されているメソッドの使い方メモ]] | [[https://qiita.com/opengl-8080/items/e57dab6e1fa5940850a3|HamcrestのMatchersに定義されているメソッドの使い方メモ]] | ||
+ | |||
+ | [[https://github.com/npryce/hamkrest/blob/master/docs/function-references.md|Shortcuts: using function references as Matchers]] | ||
<code kotlin build.gradle(module)> | <code kotlin build.gradle(module)> | ||
ライン 18: | ライン 24: | ||
<code kotlin> | <code kotlin> | ||
- | import com.natpryce.hamkrest.* | + | import com.natpryce.hamkrest.* // kotlin用のhamkrest |
import com.natpryce.hamkrest.assertion.assertThat | import com.natpryce.hamkrest.assertion.assertThat | ||
import org.junit.Test | import org.junit.Test | ||
ライン 28: | ライン 34: | ||
val actual=GameMaker(1).makePlus() | val actual=GameMaker(1).makePlus() | ||
- | assertThat("Hello", equalTo("Hello")) | + | assertThat("Hello", equalTo("Hello")) //文字列一致 |
- | assertThat( Integer.parseInt(actual.ans),allOf(greaterThanOrEqualTo(1), lessThanOrEqualTo(9))) | + | assertThat( Integer.parseInt(actual.ans),allOf(greaterThanOrEqualTo(1), lessThanOrEqualTo(9))) //1~9まで |
+ | |||
+ | // listsは1..9まですべてを含む | ||
+ | val contain = Matcher(List<out Int>::containsAll,listOf(1,2,3,4,5,6,7,8,9)) | ||
+ | assertThat(lists,contain ) | ||
} | } | ||
} | } | ||
</code> | </code> | ||
+ | |||
+ | |||
+ | ===== testでLogをmockする ===== | ||
+ | |||
+ | [[https://qiita.com/oxsoft/items/b12b7a6c17e92eb880cd|Method d in android.util.Log not mocked.に対する3つの対処法]] | ||
+ | |||
+ | <code> | ||
+ | java.lang.RuntimeException: Method d in android.util.Log not mocked. See http://g.co/androidstudio/not-mocked for details. | ||
+ | </code> | ||
+ | |||
+ | ==== 対策1.testOptionsを追加する ==== | ||
+ | http://g.co/androidstudio/not-mocked | ||
+ | |||
+ | Unit Testsで全てのAndroidクラスが何もしないようになる。 | ||
+ | <code kotlin build.gradle(Modlue:app)> | ||
+ | android { | ||
+ | compileSdkVersion 29 | ||
+ | ・・・ | ||
+ | // ↓追加 | ||
+ | testOptions { | ||
+ | unitTests.returnDefaultValues = true | ||
+ | } | ||
+ | // ↑追加 | ||
+ | } | ||
+ | </code> | ||
+ | |||
+ | ==== 対策2.PowerMockを使う==== | ||
+ | |||
+ | PowerMockは、static関数のMockを作ることができるライブラリ。 | ||
+ | インポートするバージョンによってはうまく動作しないようでハマった。 | ||
+ | |||
+ | [[https://blog.masterka.net/archives/271|Android+Kotlin+PowerMockitoをやってみた]] | ||
+ | |||
+ | <code kotlin build.gradle(Modlue:app)> | ||
+ | |||
+ | </code> | ||
+ | |||
+ | <code kotlin> | ||
+ | |||
+ | import android.util.Log | ||
+ | import com.natpryce.hamkrest.allOf | ||
+ | import com.natpryce.hamkrest.assertion.assertThat | ||
+ | import com.natpryce.hamkrest.equalTo | ||
+ | import com.natpryce.hamkrest.greaterThanOrEqualTo | ||
+ | import com.natpryce.hamkrest.lessThanOrEqualTo | ||
+ | import org.junit.Test | ||
+ | import org.junit.runner.RunWith | ||
+ | import org.powermock.api.mockito.PowerMockito | ||
+ | import org.powermock.core.classloader.annotations.PrepareForTest | ||
+ | import org.powermock.modules.junit4.PowerMockRunner | ||
+ | |||
+ | |||
+ | @RunWith(PowerMockRunner::class) //ADD | ||
+ | @PrepareForTest(Log::class) //ADD | ||
+ | class GameMakerTest { | ||
+ | |||
+ | @Test | ||
+ | fun makePlus() { | ||
+ | PowerMockito.mockStatic(Log::class.java) //ADD | ||
+ | ・・・テスト対処でもテストでもLogがあればmockしてくれる。 | ||
+ | |||
+ | } | ||
+ | |||
+ | } | ||
+ | </code> | ||
+ |