ユーザ用ツール

サイト用ツール


サイドバー

android:junit

以前のリビジョンの文書です


junit

Hamkrest - Hamcrest for Kotlin

Hamkrestはおそらく一番メジャーなMatcher。

Hamkrest - Hamcrest for Kotlin
com.natpryce.hamkrest → kotlin用のhamkrest
org.hamcrest. → 普通のhamkrest

HamcrestのMatchersに定義されているメソッドの使い方メモ

[[Shortcuts: using function references as Matchers

build.gradle(module)
dependencies {
・・・
    implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
    implementation "org.jetbrains.kotlinx:kotlinx-serialization-runtime:0.13.0"
    implementation 'com.natpryce:hamkrest:1.7.0.0' // ADD
import com.natpryce.hamkrest.* // kotlin用のhamkrest
import com.natpryce.hamkrest.assertion.assertThat
import org.junit.Test
 
class xxxTest {
 
    @Test
    fun xxx() {
 
        val actual=GameMaker(1).makePlus()
        assertThat("Hello", equalTo("Hello")) //文字列一致
        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 )
        }
 
}

testでLogをmockする

Method d in android.util.Log not mocked.に対する3つの対処法

java.lang.RuntimeException: Method d in android.util.Log not mocked. See http://g.co/androidstudio/not-mocked for details.

対策1.testOptionsを追加する

http://g.co/androidstudio/not-mocked

Unit Testsで全てのAndroidクラスが何もしないようになる。

build.gradle(Modlue:app)
android {
    compileSdkVersion 29
    ・・・
   // ↓追加
    testOptions {
        unitTests.returnDefaultValues = true
    }
    // ↑追加
}

対策2.PowerMockを使う

PowerMockは、static関数のMockを作ることができるライブラリ。
インポートするバージョンによってはうまく動作しないようでハマった。

Android+Kotlin+PowerMockitoをやってみた

build.gradle(Modlue:app)
 
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してくれる。
 
    }
 
}
android/junit.1575390364.txt.gz · 最終更新: 2019/12/04 01:26 by ips