ローカルテストは、Android ではなく独自のワークステーションで直接実行されます。 ダウンロードしますそのため、ローカルの Java 仮想マシン(JVM)を使用し、 Android デバイスではなくテストを実行します。ローカルテストでは アプリのロジックを高速化できますただし、外部 IP アドレスを持つ Android フレームワークでは、実行できるテストの種類に制限が設けられています。
単体テストは、コードの小さなセクション( テストをご覧ください。そのコードを実行し、結果を確認します。
通常、単体テストはシンプルですが、単体テストがうまくいかない場合には テスト対象は、テスト性を念頭に置いて設計されていません。
- 検証するコードは、テストからアクセス可能である必要があります。対象 プライベート メソッドを直接テストすることはできません。代わりに、クラスでテストし、 公開 API を使用します。
- 単体テストを単独で実行するには、単体テストと 偽のテストやモニタリングなどの管理下にあるコンポーネントで その他のテストダブルです。コードが依存関係に依存している場合、これは特に問題になります。 実装します。
Android での一般的な単体テストの戦略については、 テストをご覧ください。
ローカルテストの場所
デフォルトでは、ローカル単体テストのソースファイルは
module-name/src/test/
。このディレクトリは、新規作成したときにすでに存在しています。
プロジェクトを作成します。
テスト用の依存関係の追加
また、Terraform を使用してプロジェクトのテスト依存関係を JUnit テスト フレームワークによって提供される標準 API。
これを行うには、アプリのモジュールの build.gradle
ファイルを開き、以下を指定します。
使用できます。testImplementation
関数を使用して
ローカルテストのソースセットに適用し、アプリケーションには適用できません。
dependencies {
// Required -- JUnit 4 framework
testImplementation "junit:junit:$jUnitVersion"
// Optional -- Robolectric environment
testImplementation "androidx.test:core:$androidXTestVersion"
// Optional -- Mockito framework
testImplementation "org.mockito:mockito-core:$mockitoVersion"
// Optional -- mockito-kotlin
testImplementation "org.mockito.kotlin:mockito-kotlin:$mockitoKotlinVersion"
// Optional -- Mockk framework
testImplementation "io.mockk:mockk:$mockkVersion"
}
ローカル単体テストクラスを作成する
ローカル単体テストクラスは、JUnit 4 テストクラスとして記述します。
そのためには、1 つ以上のテストメソッドを含むクラスを作成します。通常は
module-name/src/test/
。テストメソッドは @Test
アノテーションで始まり、
コンポーネントの 1 つの側面を実行して検証する
コードが含まれています
選択します
次の例は、ローカル単体テストクラスを実装する方法を示しています。「
テストメソッドのemailValidator_correctEmailSimple_returnsTrue()
検証試行回数
アプリ内のメソッドである isValidEmail()
。テスト関数が次のレスポンスを返します。
isValidEmail()
も true を返す場合は true。
Kotlin
import org.junit.Assert.assertFalse import org.junit.Assert.assertTrue import org.junit.Test class EmailValidatorTest { @Test fun emailValidator_CorrectEmailSimple_ReturnsTrue() { assertTrue(EmailValidator.isValidEmail("name@email.com")) } }
Java
import org.junit.Test; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; class EmailValidatorTest { @Test public void emailValidator_CorrectEmailSimple_ReturnsTrue() { assertTrue(EmailValidator.isValidEmail("name@email.com")); } }
読みやすいテストを作成して、アプリケーションのコンポーネントが
想定どおりの結果が返されます。次のように、アサーション ライブラリを使用して、
junit.Assert、Hamcrest、
真実。上記のスニペットは、BigQuery の
junit.Assert
。
モック可能な Android ライブラリ
ローカル単体テストを実行すると、Android Gradle プラグインに このライブラリには、Android フレームワークのすべての API を プロジェクトで使用しているバージョン。このライブラリには、すべての public メソッドと クラスですが、メソッド内のコードは削除されています。該当する場合 すべてのメソッドがアクセスされると、テストは例外をスローします。
これにより、Android 内でクラスを参照する際にローカルテストを作成できるようになります。
フレームワーク(Context
など)です。さらに重要な点として モックを使用して
実装する方法を学びました
Android 依存関係のモック
よくある問題は、クラスが文字列リソースを使用していることが判明することです。Google Chat では
Context
の getString()
メソッドを呼び出して文字列リソースを取得する
クラスです。ただし、ローカルテストでは Context
やそのメソッドを以下のとおり使用することはできません。
Android フレームワークに属します。getString()
の呼び出しは次のようになります。
クラスから削除しましたが、これは必ずしも現実的ではありません。これを解決するには、
次の場合に常に同じ値を返す Context
のモックまたはスタブを作成します。
getString()
メソッドが呼び出されます。
Mockable Android ライブラリと、 Mockito または MockK を使用すると、 単体テストで Android クラスのモックの動作を確認する。
Mockito を使用してローカル単体テストにモック オブジェクトを追加するには、次の手順を実施します。 プログラミング モデル:
- 次のように、
build.gradle
ファイルに Mockito ライブラリの依存関係を含めます。 テスト環境を設定するをご覧ください。 - 単体テストクラスの定義の先頭に、
@RunWith(MockitoJUnitRunner.class)
アノテーション。このアノテーションは、 Mockito テストランナー: フレームワークの使用状況が正しく、 モック オブジェクトの初期化を簡素化します。 - Android の依存関係用のモック オブジェクトを作成するには、
@Mock
アノテーションを追加します。 指定する必要があります。 - 依存関係の動作をスタブするには、条件を指定して
when()
とthenReturn()
を使用して条件が満たされた場合の戻り値 あります。
次の例は、モックを使用する単体テストの作成方法を示しています。
Mockito-Kotlin で作成された Kotlin の Context
オブジェクト。
import android.content.Context
import org.junit.Assert.assertEquals
import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.Mock
import org.mockito.junit.MockitoJUnitRunner
import org.mockito.kotlin.doReturn
import org.mockito.kotlin.mock
private const val FAKE_STRING = "HELLO WORLD"
@RunWith(MockitoJUnitRunner::class)
class MockedContextTest {
@Mock
private lateinit var mockContext: Context
@Test
fun readStringFromContext_LocalizedString() {
// Given a mocked Context injected into the object under test...
val mockContext = mock<Context> {
on { getString(R.string.name_label) } doReturn FAKE_STRING
}
val myObjectUnderTest = ClassUnderTest(mockContext)
// ...when the string is returned from the object under test...
val result: String = myObjectUnderTest.getName()
// ...then the result should be the expected one.
assertEquals(result, FAKE_STRING)
}
}
Mockito フレームワークの使用方法について詳しくは、Mockito API
リファレンスと SharedPreferencesHelperTest
クラスを
サンプルコードをご覧ください。また、Android テスト Codelab もお試しください。
エラー: 「Method ... not mocked」
Mockable Android ライブラリは、Mockable Android ライブラリが
メソッドを Error: "Method ... not mocked
メッセージと併用します。
スローされた例外がテストに問題がある場合は、
動作に応じてメソッドが代わりに null またはゼロを返し、
戻り値の型です。そのためには、プロジェクトのプロジェクトに次の構成を追加します。
Groovy のトップレベルの build.gradle
ファイルは次のようになります。
android {
...
testOptions {
unitTests.returnDefaultValues = true
}