web-dev-qa-db-ja.com

Android studioはAndroidTestCaseの「空のテストスイート」と言います

AndroidTestCaseを拡張するサンプルテストケースを作成しました。テストケースを実行すると、次のようにエラーが表示されます

Running tests
Test running startedTest running failed: 
Instrumentation run failed due to 'Java.lang.RuntimeException'
Empty test suite.

テストケース

import Android.test.AndroidTestCase;
import Android.test.suitebuilder.annotation.SmallTest;

import static org.junit.Assert.assertEquals;

import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;

import Java.lang.Exception;
import Java.lang.Override;

public class DateFormatTest extends AndroidTestCase{

    @Override
    protected void setUp() throws Exception {
        super.setUp();
    }

    @Override
    protected void tearDown() throws Exception {
        super.tearDown();
    }

    public DateFormatTest(){
        super(DateFormatTest.class);
    }


    @SmallTest
    public void testMultiply() {

        assertEquals("10 x 5 must be 50", 50, 10*5);
    }
}
36

誰もそれを言及していないので、AndroidTestCaseサブクラスのメソッドはpublicであり、「test」で始まる名前を持つ必要があります!

OPと答えはすべてこれで正しいのですが、私はそれを逃し、まったく同じエラーを受け取りました。

17
Toerndev

Android St​​udioからテストを実行すると、このエラーが発生しました。テストケースを間違ったフォルダに入れていたことが判明しました。 Gradle/Android Studioを実行している場合、Androidテストはすべてsrc/instrumentTest/Javaフォルダーにある必要があります。

Edit:Gradleプラグインバージョン0.9以降では、フォルダーの正しい名前はandroidTestです。 ( http://tools.Android.com/tech-docs/new-build-system/migrating_to_09

12
emidander

この質問は古いものであり、この質問が行われてから開発ツールが大幅に変更されたことを理解しています。

ただし、(AndroidStudio 2.1.1で)同様の問題が発生し、誤解を招くのはエラーメッセージだけであることが判明しました。私にとっては、それは言った:

Test running started
Test running failed: Instrumentation run failed due to 'Java.lang.IllegalStateException'
Empty test suite.

(注:元の質問との違いはIllegalStateExceptionとRuntimeExceptionにあります)

Logcatの出力を調べるとわかるように、このIllegalStateExceptionは実際にアプリケーションコンテキストの初期化でスローされたことが判明しました。その結果、テストメソッドは実行されず、Android Studioはこのやや誤解を招く「空のテストスイート」エラーを書き込みます。

つまり「空のテストスイート」とは、実際に言うことを意味する場合があります(たとえば、@Testアノテーションを付け忘れたためにテストメソッドが宣言されていない)が、何か(実行時例外がスローされるなど)アプリケーションの初期化コードで)テストランナーがテストメソッドに到達するのを防ぎます(これはあなたのケースのようです)。

Adb-logcatを確認し、RuntimeExceptionsを検索します。これはおそらくあなたの問題の根本原因を見つけるでしょう。

10
kuhnmi

私のテストメソッドの1つにメソッドシグネチャの後に「例外をスロー」が含まれていなかったため、このエラーが発生しました。誰かを助けるかもしれない

7
dabluck

同じ問題が発生しました。私が持っていました testInstrumentationRunner "Android.support.test.runner.AndroidJUnitRunner"私のdefaultConfig {...}。私はちょうどその行を削除しましたが、今はうまく機能しています(IDEはビルド時に正しいランナー構成を選択しています)。

これが誰かの助けになることを願っています。

6
ahmed_khan_89

私の問題は、Android studio、このように見えるデフォルトのコンストラクターを生成したことでした

public class SomeTest extends ActivityUnitTestCase<ActivityYouWantToTest>{
    public SomeTest(Class<NewsActivity> activityClass) {
        super(activityClass);
    }
}

問題を取り除くためにこれに変更する必要がありました

public class SomeTest extends ActivityUnitTestCase<ActivityYouWantToTest>{
        public SomeTest() {
            super(ActivityYouWantToTest.class);
        }
    }
5
Lukas Hanacek

AndroidTestCaseクラスを使用して、Androidに固有のコンポーネントをテストしていることを定義します。 AndroidTestCaseの主な利点は、文字列やレイアウトなどのアプリケーションのリソースにアクセスできることです。

AndroidTestCaseは、Activityとして特定のContextを提供しないため、デフォルトのコンストラクターを上書きする必要はありませんが、一般的なコンストラクターを提供するため、引き続き呼び出すことができますgetContext()

この例では、Androidコンポーネントを使用していません。そのため、次のことは理にかなっています。

import Android.test.suitebuilder.annotation.SmallTest;

import junit.framework.TestCase;

public class DateFormatTest2 extends TestCase {

    @SmallTest
    public void testMultiply() {

        assertEquals("10 x 5 must be 50", 50, 10 * 5);
    }
}

TestCaseではなくAndroidTestCaseを使用していることに注意してください。

AndroidTestCaseを適用するには、リソースを必要とするテストが必要になります。

import Android.test.AndroidTestCase;
import Android.test.suitebuilder.annotation.SmallTest;

public class DateFormatTest extends AndroidTestCase {

    @SmallTest
    public void testAppTitle() {
        assertEquals("MyApp", getContext().getResources().getString(R.string.app_name));
    }
}

ここでは、アプリケーションのリソースにアクセスする必要があるため、AndroidTestCaseを使用します。

3
MariusVolkhart

このガイドが役立つ場合があります- http://www.slideshare.net/tobiaspreuss/how-to-setup-unit-testing-in-Android-studio

最新のgradle(0.9+)では、テストはandroidTestdirの下にある必要があります

Gradle.buildでも:

dependencies {
     androidTestCompile 'junit:junit:4.+'
}

defaultConfig{

testPackageName "test.Java.foo"
testInstrumentationRunner "Android.test.InstrumentationTestRunner"

}

1
Gal Bracha

GradleConfigでtestRunnerを構成しましたか?さまざまなテストにさまざまなTestRunnerを使用します(速度を上げるために。私の構成は次のようになります)

Android {    
// Some stuff      
  defaultConfig {
        // Some other stuff

        //junit test
        testInstrumentationRunner "de.qabel.qabelbox.QblJUnitRunner"
        //ui tests
        testInstrumentationRunner "Android.support.test.runner.AndroidJUnitRunner"   
    }  
}

この行の1つを無効にすると、対応するテストも「空のテストスイート」を報告します。

1
r-hold

Androidアプリケーションのテストについて学び始めたばかりで、同じ問題に苦労しています。たとえば、テストクラスのデフォルトコンストラクターを提供する必要があります。

package nilzor.myapp.tests;

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

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

テストケースにはすでにデフォルトのコンストラクタがありますが、それでも「空のテストスイート」というエラーが表示され、「Instantiating tests ...」で止まりました。

Android Studioをリセットして、新しいワークスペースを作成しようとしましたが、うまくいきませんでした。

最後に、close Android SDK and emulator。

  1. Android-sdks/platform-toolsにアクセスします。

  2. 次のコマンドを使用して、すべてのAndroid一時ファイルをクリアします。

    a。 rm -rf ~/Library/Application Support/AndroidStudio

    b。 rm -rf ~/Library/Caches/AndroidStudio

    c。 rm -rf ~/Library/Application Support/AndroidStudio

    d。 rm -rf ~/Library/Preferences/AndroidStudio

  3. 実行:

    ./adb kill-server
    ./adb start-server
    
  4. Androidを開始し、テストケースを実行します。

0
StackTrace