98

IntelliJ /Androidが「空のテストスイート」を報告している理由を理解しようと、ここで壁に頭をぶつけています。2つのIntelliJモジュール(Eclipseでは「プロジェクト」)を含む小さなプロジェクトがあります。ユニットテストモジュールには独自のAndroidManifest.xmlがあり、これを下部に貼り付けました。テストは-objectActivityUnitTestCaseに依存するため、を実行しようとしています。Context

メインモジュールのパッケージ名はですnilzor.myapp。テストモジュールのパッケージ名は次のとおりです。nilzor.myapp.tests

テストランナーがtestBlah()-methodをテストとして検出しないのはなぜですか?

<?xml version="1.0" encoding="utf-8"?>
<!-- package name must be unique so suffix with "tests" so package loader doesn't ignore us -->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="nilzor.myapp.tests"
          android:versionCode="1"
          android:versionName="1.0">
    <!-- We add an application tag here just so that we can indicate that
         this package needs to link against the android.test library,
         which is needed when building test cases. -->
    <application>
        <uses-library android:name="android.test.runner"/>
    </application>
    <!--
    This declares that this application uses the instrumentation test runner targeting
    the package of nilzor.myapp.  To run the tests use the command:
    "adb shell am instrument -w nilzor.myapp.tests/android.test.InstrumentationTestRunner"
    -->
    <instrumentation android:name="android.test.InstrumentationTestRunner"
                     android:targetPackage="nilzor.myapp"
                     android:label="Tests for nilzor.myapp"/>
</manifest>

そして、これが私のテストクラスです:;

package nilzor.myapp.tests;

public class NilzorSomeTest<T extends Activity> extends ActivityUnitTestCase<T>{
    public NilzorSomeTest(Class<T> activityClass){
        super(activityClass);
    }

    @SmallTest
    public void testBlah(){
        assertEquals(1,1);
    }
}

テストの基礎アクティビティテストのドキュメントを読み、Eclipse用ですが、このHelloworldテストブログをフォローしてみました。テストランナーにテストを見つけて実行させることができません。私は何が間違っているのですか?

私がまだ確信が持てない質問のいくつかは次のとおりです。

  1. ユニットテストメソッドの上に注釈が必要ですか?
  2. メソッドの前に「test」を付ける必要がありますか、それともJUnitテスト専用ですか?
  3. のサブパッケージでテストを行うことはできますnilzor.myapp.testsか?

しかし、この投稿の主な質問は、なぜテストランナーが私のテストを検出しないのかということです。

4

31 に答える 31

70

テストクラスのデフォルトコンストラクタを提供する必要があります。次に例を示します。

package nilzor.myapp.tests;

public class NilzorSomeTest extends ActivityUnitTestCase<ActivityYouWantToTest>{
    public NilzorSomeTest(){
        super(ActivityYouWantToTest.class);
    }

    @SmallTest
    public void testBlah(){
        assertEquals(1,1);
    }
}

他の質問について:

  1. いいえ。私のテストはまだアノテーションなしで実行されますが、アノテーションを付けるのは良い習慣だと思います。実行するテストのサイズを指定できます。Androidの@SmallTest、@ MediumTest、および@LargeTestアノテーションの目的は何ですか?を参照してください。詳細については。

  2. はい、「テスト」プレフィックスが必要です。InteliJは、「test」プレフィックスがない場合に「method never used」警告を表示し、テスト実行中にそのメソッドをスキップします。

  3. はい。テストをサブパッケージに整理しましたが、うまく機能しているようです。

于 2013-01-20T12:42:21.317 に答える
54

これが「突然」または「5分前に機能していた」場合、私の解決策は、実行/デバッグ構成に入り、「Androidテスト」の下の構成をすべて削除することでした。テスト対象のクラスをリファクタリングすると(たとえば、新しいパッケージに移動することによって)、これらの構成が破損することがあります。

ここに画像の説明を入力してください

于 2016-07-04T18:00:04.943 に答える
9

上記のどれも私のためにそれを修正しませんでした。助けになったのは指示に従うことでした:

テスト構成を作成する

Android Studioの場合:

  • [実行]メニュー->[構成の編集]を開きます
  • 新しいAndroidテスト 構成を追加します
  • モジュールを選択してください
  • 特定のインストルメンテーションランナーを追加します。

  android.support.test.runner.AndroidJUnitRunner

新しく作成した構成を実行します。

于 2016-08-09T18:55:51.273 に答える
7

同様の問題がありました。これが発生している理由はわかりませんが、AndroidStudioの[ファイル]>[キャッシュの無効化/再起動]に移動することで修正できました。

于 2016-09-19T16:54:08.447 に答える
4

Android Studioに役立つかどうかはわかりませんが、IntellijとGradleの競合が発生しました。テストファイルを「右クリック」して「ファイルをコンパイル...Test.java」をクリックして解決しました。その後、私は再び単一のテストを実行することができました。

于 2016-02-14T12:53:10.313 に答える
4

Android Studio 2.3.1でも同じ問題が発生しましたが、これはASの単なるバグであることがわかりました。バージョン2.2.1で同じテストを実行すると、正常に実行されます。

CannaryチャネルでAndroidStudioのみを実行している場合は、安定バージョンもインストールすることをお勧めします。http://tools.android.com/tips/using-multiple-android-studio-versions

于 2017-01-08T01:32:20.147 に答える
3

gradleandroid studioがアップグレードされるまで、テストは正常に実行されていました。

テストにデフォルトのコンストラクターを追加する以外に、テストスイートを機能させるためにこれらのいくつかのことを行う必要があるかもしれません

src/作成の下androidTest/java/<your-package-name>/test。に注意してくださいandroidTest。それ以外のものinstrumentTestは機能しません。

これをに追加build.gradle

sourceSets {
    testLocal {
        java.srcDir file('src/androidTest/java')
        resources.srcDir file('src/androidTest/resources')
    }
}



android{
    sourceSets {
       instrumentTest.setRoot('src/androidTest/')
    }
}

dependencies{
     testLocalCompile 'junit:junit:4.11'
}

task localTest(type: Test, dependsOn: assemble) {
    testClassesDir = sourceSets.testLocal.output.classesDir

    android.sourceSets.main.java.srcDirs.each { dir ->
        def buildDir = dir.getAbsolutePath().split('/')
        buildDir = (buildDir[0..(buildDir.length - 4)] + ['build', 'classes', 'debug']).join('/')

        sourceSets.testLocal.compileClasspath += files(buildDir)
        sourceSets.testLocal.runtimeClasspath += files(buildDir)
    }

    classpath = sourceSets.testLocal.runtimeClasspath
}

check.dependsOn localTest

これをに追加しますAndroidManifest.xml

 <instrumentation
        android:name="android.test.InstrumentationTestRunner"
        android:label="Tests for my packaged app"
        android:targetPackage="<my-package-name>.test" />
于 2014-05-23T12:49:34.793 に答える
3

Intellij 15の場合、私はこの問題を次の方法で解決しました。

  1. 「プロジェクト構造」設定を開く
  2. 「モジュール」(左側)をクリックします
  3. [ソース]タブ
    a。ソースディレクトリ(通常はsrc)を右クリックし、[ソース]をクリックします。
    b。テストディレクトリを右クリックし、[テスト]をクリックします
    。c。アウトディレクトリを右クリックして[除外]をクリックします
  4. [パス]タブ
    に移動します。[モジュールコンパイル出力パスを使用する]ラジオボタンをクリックします
    b。「出力パス」の出力パスディレクトリを選択します
    。c。「テスト出力パス」のテストパスディレクトリを選択します
  5. [OK]をクリックします
于 2016-01-17T20:23:00.467 に答える
3

明らかに、テストを実行するには、インストルメント化されたテストであるため、ターゲットデバイスが必要です。何らかの理由で、Android Studioは、このターゲットデバイスをポイントするように要求せず、「EmptyTestSuite」メッセージを表示するだけの場合があります。これを修正するにはさまざまな方法があります。ここにいくつかあります。

  • メインアプリを実行してターゲットデバイスを選択するか、

  • 実行(実行/実行... /構成の編集)構成に移動し、デプロイメントターゲットオプションを変更します

于 2017-04-19T08:22:02.713 に答える
3

build.gradleにこれがあったため、この問題が発生しました。

testOptions {
    execution "ANDROID_TEST_ORCHESTRATOR"
}

Android Test Orchestratorを使用していませんでしたが(チュートリアルから誤ってコピーしたに違いありません)。

それをコメントすることは私のためにそれを解決しました。

于 2017-12-11T21:12:21.107 に答える
2

私の場合、前の答えはどれもうまくいきませんでした。解決策は、テストクラスを別のパッケージに移動することでした。

これは下で起こったandroidTest/

于 2016-12-24T19:03:47.913 に答える
2

私の場合、その問題は私のコードの間違いが原因で発生しました。実際にはそれはアプリケーションクラスにあったため、ターゲットアクティビティが開かれず、テスト出力が出力されました。

空のテストスイートエラー

ターミナルから直接テストを実行してみましたadb shell am instrument -w -r -e package your.package -e debug false android.support.test.runner.AndroidJUnitRunner。これにより、例外についてさらに詳しく印刷されます。

于 2017-06-14T11:25:11.340 に答える
1

他のソリューションはどれもうまくいきませんでしたが、既存のアプリまたはテストスイートをアンインストールしてからテストを実行するだけで、これを機能させることができました。

于 2016-02-10T17:26:48.980 に答える
1

私の場合、私が取り組んでいたプロジェクトにはいくつかのモジュールがありました。このエラーに対して私が見つけた解決策はどれも役に立ちませんでしたが、build.gradleファイルの両方にテストの依存関係を追加すると、テストが魔法のように機能し始めたことにどういうわけか気づきました。テストがモジュールの1つだけに存在するかどうかは関係ありません。両方のgradleファイルに、依存関係とtestInstrumentationRunner値が含まれている必要があります。

したがって、私のように、他の答えが役に立たなかった場合は、各モジュールのbuild.gradleファイルに次の行を追加してみてください。

android {    
    ....
    defaultConfig {
        ...
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }  
}

そして、次も追加します。

dependencies {
    ...
    // Test
    androidTestCompile 'com.android.support:support-annotations:23.4.0'
    androidTestCompile 'com.android.support.test:runner:0.5'
    androidTestCompile 'com.android.support.test:rules:0.5'

}
于 2016-08-03T04:56:58.707 に答える
1

ファイルの名前を変更したところ、問題が修正されました。

于 2017-04-01T01:47:55.853 に答える
1

同じ問題が発生しました。その理由は、テストクラスのクラス名の末尾にテストがないためです。

于 2017-11-15T22:59:32.913 に答える
1

@BeforeClass私の問題は、私のテストケースのメソッドでスローされた例外が原因で発生しました。それはどういうわけかテストを失敗させていませんでした-私はlogcat出力を調べただけでそれを見つけました。

例外を修正すると、突然テストが実行されました。

于 2018-02-01T01:49:49.420 に答える
1

今日問題に直面した後(空のスイートエラーでインストルメント化されたAndroidテストを実行できない)、この問題に関するgitの問題を見つけ、StephanLinznerのおかげでテストを実行できました。

tl; drテストを実行するには、クラスではなくテストパッケージを右クリックする必要があります。

参照:https ://github.com/googlecodelabs/android-testing/issues/27#issuecomment-219074863

于 2018-02-07T20:51:31.297 に答える
0

この記事は私を助けました:空のテストスイート

基本的に、srcディレクトリの下にパッケージ(instrumentTest / java )を作成し、そこにすべてのテストを配置する必要がありました。次に、これらのテストを個別に実行できます。

于 2014-04-09T17:23:54.333 に答える
0

私はこれが起こっていた生のJavaプロジェクトを持っていました。単にJava+JUnit4。それは間違いなくあなたの.idea/または.imlファイルに何かとともに存在します。私は私のものを廃棄し、再インポートし、そして最終的にテストが再び実行されました。

于 2016-04-20T05:12:11.633 に答える
0

テストクラスはコンパイルから除外される場合があります。settings-compiler-excludeで修正してください。

于 2016-06-29T06:19:47.703 に答える
0

Android Studioが突然テストの実行/デバッグを停止することを決定したときに実行するデバッグ手順は次のとおりです(そして、男の子はこれが恥ずかしいほど頻繁に発生します!!):

  • ビルド:→プロジェクトの再構築
  • デバイスの再起動:デバイス/エミュレーターを再起動して、再試行してください
  • デバイススイッチ:通常の電話とエミュレーターの両方を使用している場合は、一方のプラグを抜いて、一方のデバイスで実行してみてください
  • Android Studio:ファイル->キャッシュを無効にして再起動します
  • アクティビティモニター/タスクマネージャー:プロセスを名前で並べ替え、RAMを大量に使用している名前のないプロセスがあるかどうかを確認します。これはAndroidStudioの「ゴースト」プロセスであり、強制終了する必要があります。
  • git revert:最新のコードを隠して/元に戻してみてください。Android Studio / gradleが見逃すコンパイルエラーがあり、コンパイルできないコードを実行しようとすることがあります。
  • AndroidStudioをアンインストールしてから再インストールします。

それらに遭遇したら、さらに修正を追加します!

于 2016-09-24T05:04:58.147 に答える
0

私は何もせず、半日の苦痛の後に問題は解決しました。プロジェクトを何度も開閉し、各クラスのテストを手動で実行しました。おそらくそれで問題は解決しました。

于 2016-10-20T08:12:47.277 に答える
0

私の場合、インストルメント化されたテストをで行いましたandroidTest/java/<package.name>/MyTestingClassが、現在のビルドバリアントを「プリプロダクション」に設定しました。そして、ポイントがあります!Android Studioのドキュメントで指定されているとおり:

デフォルトでは、すべてのテストはデバッグビルドタイプに対して実行されます。

私がこれを行うまで、メッセージClass not found. Empty test suite.は表示され続けました:

  1. この行をbuild.gradleに追加します:

    android{
        [...]
        testBuildType "preproduction"
    }
    
  2. 同期されたgradle。
  3. 以前のテスト構成はこのGradle同期を考慮していないため、削除してください。

それから私は再びテストを実行しました、そして今度はそれらは完璧に実行されます!!!

于 2016-11-24T17:55:59.140 に答える
0

spockフレームワークを備えたAndroidStudioで、gradleのバージョンを2.2.2から3.2.1に変更しましたが、すべてうまくいきました。

于 2016-12-09T08:43:28.923 に答える
0

受け入れられた答えは私の問題を解決しませんでした。そこでExampleInstrumentedTest、Android Studioでデフォルトで作成され、問題なく実行されるものをコピーすることにしました。コピープロセス中に名前を変更し(コピー後にリファクタリング->名前を変更しないでください!)、単体テストの内容を貼り付けました。その後、エラーは消えました。

于 2017-07-18T14:37:14.120 に答える
0

Android Studio 3.0プロジェクトでローカル単体テストを実行しようとすると、「空のテストスイート」エラーが発生しました。

Android Developerのドキュメントを読んだ後、問題の原因が次の行を含むgradle構成にあることにすぐに気付きました。

testImplementation 'com.android.support.test:runner:0.5'
testImplementation 'com.android.support.test:rules:0.5'

AndroidJUnitRunnerクラスは、 AndroidデバイスでJUnit3またはJUnit4スタイルのテストクラスを実行できるJUnitテストランナーです。

私のテストはローカルであり、したがってどのデバイスでも実行する必要がないため、上記のcom.android.support.test ...エントリを削除すると、単体テストを実行できるようになりました。

于 2017-11-03T11:00:13.810 に答える
0

@BeforeClassメソッドのデータベースにいくつかの挿入を行っていました。オブジェクト/データベースのマッピングに問題があることに気づきました。このデータマッピングの問題が私にとってこの問題の原因でした。

于 2017-12-07T16:18:07.107 に答える
0

誤って非モッククラス変数にアノテーションを付けたときに、これが発生しました。アノテーション@Mock を削除すると、テストが正常に実行されました。これは、AndroidStudioのJunit4.5で発生しました

于 2018-07-24T02:16:28.843 に答える
0

解決策ではありませんが、すぐに軌道に戻るための回避策です。

  1. まず、機能するテストを見つけます。「空のテストスイート」エラーが発生した新しいテストを作成していました。私は他のテストを実行しましたが、それらは通常どおり機能していました。

  2. 動作するテストファイルをコピーします。これを実行して、このコピーが元のコピーと同じように機能することを確認します。

  3. 本体を取り外して、新しいテストコードに置き換えます。

これでテストが機能するはずです。

原因を突き止めるのに約2時間かかりましたが、役に立ちませんでした。

于 2018-11-07T19:21:36.617 に答える
0

私は次のコードブロックを持っていました

@get:Rule
lateinit var activityScenario: ActivityScenario<HomeActivity>

さまざまなテストケースに基づいて、アクティビティの目的でさまざまなパラメータを渡す必要があったためです。テストを削除すると@get:Rule、テストが再び機能し始めました。

于 2019-04-11T09:05:50.850 に答える