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);
}
}
誰もそれを言及していないので、AndroidTestCase
サブクラスのメソッドはpublic
であり、「test」で始まる名前を持つ必要があります!
OPと答えはすべてこれで正しいのですが、私はそれを逃し、まったく同じエラーを受け取りました。
Android Studioからテストを実行すると、このエラーが発生しました。テストケースを間違ったフォルダに入れていたことが判明しました。 Gradle/Android Studioを実行している場合、Androidテストはすべてsrc/instrumentTest/Java
フォルダーにある必要があります。
Edit:Gradleプラグインバージョン0.9以降では、フォルダーの正しい名前はandroidTest
です。 ( http://tools.Android.com/tech-docs/new-build-system/migrating_to_09 )
この質問は古いものであり、この質問が行われてから開発ツールが大幅に変更されたことを理解しています。
ただし、(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を確認し、RuntimeException
sを検索します。これはおそらくあなたの問題の根本原因を見つけるでしょう。
私のテストメソッドの1つにメソッドシグネチャの後に「例外をスロー」が含まれていなかったため、このエラーが発生しました。誰かを助けるかもしれない
同じ問題が発生しました。私が持っていました testInstrumentationRunner "Android.support.test.runner.AndroidJUnitRunner"
私のdefaultConfig {...}
。私はちょうどその行を削除しましたが、今はうまく機能しています(IDEはビルド時に正しいランナー構成を選択しています)。
これが誰かの助けになることを願っています。
私の問題は、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);
}
}
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
を使用します。
このガイドが役立つ場合があります- 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"
}
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つを無効にすると、対応するテストも「空のテストスイート」を報告します。
Androidアプリケーションのテストについて学び始めたばかりで、同じ問題に苦労しています。たとえば、テストクラスのデフォルトコンストラクターを提供する必要があります。
package nilzor.myapp.tests;
public class NilzorSomeTest extends ActivityUnitTestCase<ActivityYouWantToTest>{
public NilzorSomeTest(){
super(ActivityYouWantToTest.class);
}
@SmallTest
public void testBlah(){
assertEquals(1,1);
}
}
テストケースにはすでにデフォルトのコンストラクタがありますが、それでも「空のテストスイート」というエラーが表示され、「Instantiating tests ...」で止まりました。
Android Studioをリセットして、新しいワークスペースを作成しようとしましたが、うまくいきませんでした。
最後に、close Android SDK and emulator。
Android-sdks/platform-toolsにアクセスします。
次のコマンドを使用して、すべての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
実行:
./adb kill-server
./adb start-server
Androidを開始し、テストケースを実行します。