facebook twitter hatena line email

「Android/kotlin/UnitTest/基本」の版間の差分

提供: 初心者エンジニアの簡易メモ
移動: 案内検索
(ページの作成:「 プロジェクト直下で実行 <pre> # ローカル単体テスト(tests側) $ ./gradlew test 34 actionable tasks: 20 executed, 14 up-to-date # インストゥルメ...」)
 
 
(同じ利用者による、間の5版が非表示)
行1: 行1:
 +
==テスト作成==
 +
一旦プロジェクトをAndroidStudioのkotlinで新規で作る
  
 +
以下が作られてるので確認。
 +
 +
UnittestApplication/app/src/test/java/com/example/unittestapplication/ExampleUnitTest.kt
 +
<pre>
 +
package com.example.unittestapplication
 +
 +
import org.junit.Test
 +
 +
import org.junit.Assert.*
 +
 +
/**
 +
* Example local unit test, which will execute on the development machine (host).
 +
*
 +
* See [testing documentation](http://d.android.com/tools/testing).
 +
*/
 +
class ExampleUnitTest {
 +
    @Test
 +
    fun addition_isCorrect() {
 +
        assertEquals(4, 2 + 2)
 +
    }
 +
}
 +
</pre>
 +
 +
app/src/androidTest/java/com/example/unittestapplication/ExampleInstrumentedTest.kt
 +
<pre>
 +
package com.example.unittestapplication
 +
 +
import androidx.test.platform.app.InstrumentationRegistry
 +
import androidx.test.ext.junit.runners.AndroidJUnit4
 +
 +
import org.junit.Test
 +
import org.junit.runner.RunWith
 +
 +
import org.junit.Assert.*
 +
 +
/**
 +
* Instrumented test, which will execute on an Android device.
 +
*
 +
* See [testing documentation](http://d.android.com/tools/testing).
 +
*/
 +
@RunWith(AndroidJUnit4::class)
 +
class ExampleInstrumentedTest {
 +
    @Test
 +
    fun useAppContext() {
 +
        // Context of the app under test.
 +
        val appContext = InstrumentationRegistry.getInstrumentation().targetContext
 +
        assertEquals("com.example.unittestapplication", appContext.packageName)
 +
    }
 +
}
 +
</pre>
 +
 +
==テスト実行==
 
プロジェクト直下で実行
 
プロジェクト直下で実行
 
<pre>
 
<pre>
行12: 行66:
 
公式参考:https://developer.android.com/studio/test/command-line?hl=ja#AMOptionsSyntax
 
公式参考:https://developer.android.com/studio/test/command-line?hl=ja#AMOptionsSyntax
  
==stopped Daemonsエラーが出る場合==
+
==tests側==
<pre>
+
結果出力先
$ ./gradlew test
+
app/build/reports/tests/testDebugUnitTest/index.html
Starting a Gradle Daemon, 1 busy and 1 stopped Daemons could not be reused, use --status for details
+
  
> Starting Daemon
+
===問題ないとき===
 +
以下のように出力されてた
 +
addition_isCorrect 0.001s passed
  
FAILURE: Build failed with an exception.
+
===間違えたとき===
 +
以下のようにコードを変更
 +
assertEquals(5, 2 + 2)
 +
実行後レポートには、以下のように出力されてた。
 +
java.lang.AssertionError: expected:<5> but was:<4>
  
* What went wrong:
+
==個別メソッドのテスト==
Gradle could not start your build.
+
AndroidStudioで、ExampleUnitTest.ktを選択し、副クリックで、runすると個別メソッドをテストできる。
> Could not create service of type FileAccessTimeJournal using GradleUserHomeScopeServices.createFileAccessTimeJournal().
+
 
  > Timeout waiting to lock journal cache (~/.gradle/caches/journal-1). It is currently in use by another Gradle instance.
+
==参考==
    Owner PID: 84782
+
https://qiita.com/nozaki-sankosc/items/538fe9b2a13aa7403df6
    Our PID: 86617
+
    Owner Operation:
+
    Our operation:
+
    Lock file: ~/.gradle/caches/journal-1/journal-1.lock
+
</pre>
+
killすれば良い。
+
kill -9 84782
+

2021年2月5日 (金) 22:25時点における最新版

テスト作成

一旦プロジェクトをAndroidStudioのkotlinで新規で作る

以下が作られてるので確認。

UnittestApplication/app/src/test/java/com/example/unittestapplication/ExampleUnitTest.kt

package com.example.unittestapplication

import org.junit.Test

import org.junit.Assert.*

/**
 * Example local unit test, which will execute on the development machine (host).
 *
 * See [testing documentation](http://d.android.com/tools/testing).
 */
class ExampleUnitTest {
    @Test
    fun addition_isCorrect() {
        assertEquals(4, 2 + 2)
    }
}

app/src/androidTest/java/com/example/unittestapplication/ExampleInstrumentedTest.kt

package com.example.unittestapplication

import androidx.test.platform.app.InstrumentationRegistry
import androidx.test.ext.junit.runners.AndroidJUnit4

import org.junit.Test
import org.junit.runner.RunWith

import org.junit.Assert.*

/**
 * Instrumented test, which will execute on an Android device.
 *
 * See [testing documentation](http://d.android.com/tools/testing).
 */
@RunWith(AndroidJUnit4::class)
class ExampleInstrumentedTest {
    @Test
    fun useAppContext() {
        // Context of the app under test.
        val appContext = InstrumentationRegistry.getInstrumentation().targetContext
        assertEquals("com.example.unittestapplication", appContext.packageName)
    }
}

テスト実行

プロジェクト直下で実行

# ローカル単体テスト(tests側)
$ ./gradlew test
34 actionable tasks: 20 executed, 14 up-to-date
# インストゥルメント化単体テスト(androidTests側)
$ ./gradlew connectedAndroidTest
50 actionable tasks: 30 executed, 20 up-to-date

公式参考:https://developer.android.com/studio/test/command-line?hl=ja#AMOptionsSyntax

tests側

結果出力先 app/build/reports/tests/testDebugUnitTest/index.html

問題ないとき

以下のように出力されてた

addition_isCorrect	0.001s	passed

間違えたとき

以下のようにコードを変更

assertEquals(5, 2 + 2)

実行後レポートには、以下のように出力されてた。

java.lang.AssertionError: expected:<5> but was:<4>

個別メソッドのテスト

AndroidStudioで、ExampleUnitTest.ktを選択し、副クリックで、runすると個別メソッドをテストできる。

参考

https://qiita.com/nozaki-sankosc/items/538fe9b2a13aa7403df6