Android工作室为AndroidTestCase说“空testing套件”

我创build了一个扩展了AndroidTestCase的示例testing用例。 当我运行testing用例时,它说错了

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

testing用例

 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); } } 

Solutions Collecting From Web of "Android工作室为AndroidTestCase说“空testing套件”"

由于没有人提到它: AndroidTestCase子类中的方法需要public ,名称以“test”开头!

OP和答案都得到了这个权利,但我错过了,并得到了完全相同的错误。

从Android Studio运行testing时出现此错误。 原来我把我的testing用例放在错误的文件夹中。 当运行Gradle / Android Studio时,所有的Androidtesting应该在src/instrumentTest/java文件夹中。

编辑:在Gradle插件0.9或更高版本中,文件夹的正确名称是androidTest 。 ( http://tools.android.com/tech-docs/new-build-system/migrating_to_09

我得到这个错误,因为我的testing方法之一没有包括方法签名后的“抛出exception”。 可能会帮助别人

我明白这个问题是古老的,而且自问题提出以来,开发工具已经发生了很大的变化。

不过,我有类似的问题(在AndroidStudio 2.1.1),事实certificate,这只是错误消息,是相当误导。 对我来说它说:

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

(注意:与原始问题的区别在于IllegalStateException与RuntimeException)

事实certificate,这个IllegalStateException实际上是在应用程序上下文的初始化中抛出的,如通过检查logcat输出可以看到的。 因此,没有运行testing方法,Android Studio写这个有点误导性的“Empty test suite”错误。

也就是说,“空testing套件”可以表示它实际上是什么意思(你没有任何声明的testing方法,例如,因为你忘了用@Test注释它们),但是它也可能意味着某些东西(比如应用程序初始化代码)阻止testing运行者到达任何testing方法(这似乎是你的情况)。

检查adb-logcat并searchRuntimeException 。 这可能会find你的问题的根源。

我的问题是我有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); } } 

我得到了同样的问题。 我有我的defaultConfig {...} testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" 。 我刚刚删除了这一行,现在它工作正常(IDE在构build时select正确的亚军configuration)。

我希望这会帮助别人。

我们使用AndroidTestCase类来定义我们正在testing特定于Android的组件。 AndroidTestCase的主要好处是它可以让我们访问应用程序的资源,比如string和布局等等。

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适用,需要资源的testing是必要的:

 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+)上testing应该在androidTest目录下

同样在你的gradle.build中:

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

还要添加那些在defaultConfig {

 testPackageName "test.java.foo" testInstrumentationRunner "android.test.InstrumentationTestRunner" 

}

你在你的gradleConfig中configuration了你的testRunner吗? 我们使用不同的TestRunner进行不同的testing(加快速度,我的configuration看起来像这样

 android { // Some stuff defaultConfig { // Some other stuff //junit test testInstrumentationRunner "de.qabel.qabelbox.QblJUnitRunner" //ui tests testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } } 

如果我禁用这一行中的一个,相应的testing也将报告“空testing套件”。

我刚开始学习testingAndroid应用程序,并一直在努力解决同样的问题。 您需要为您的testing类提供默认构造函数,例如:

 package nilzor.myapp.tests; public class NilzorSomeTest extends ActivityUnitTestCase<ActivityYouWantToTest>{ public NilzorSomeTest(){ super(ActivityYouWantToTest.class); } @SmallTest public void testBlah(){ assertEquals(1,1); } } 

我的testing用例中已经有了一个默认的构造函数,但仍然给我错误“Empty test suite”,并被卡在“Instantiating tests …”中。

尝试创build新的工作区,重置Android Studio,但没有奏效。

最后,closuresAndroid SDK和模拟器。

  1. 转到您的android-sdks /平台工具。

  2. 使用以下命令清除所有Android临时文件:

    一个。 rm -rf ~/Library/Application Support/AndroidStudio

    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并运行testing用例。