为什么Androidtesting运行器报告“空testing套件”?

我在这里抨击我的头在这里试图找出为什么IntelliJ / Android报告“空testing套件”。 我有一个两个IntelliJ模块(Eclipse中的“项目”)的小项目。 unit testing模块有自己的AndroidManifest.xml,我已经粘贴在底部。 我想运行一个ActivityUnitTestCase ,因为testing将依赖于Context

主模块的包名是nilzor.myapp 。 testing模块的nilzor.myapp.tests名称是nilzor.myapp.tests

为什么testing运行者没有把testBlah()方法作为一个testing呢?

 <?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> 

这是我的testing课。

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

我已经阅读了testing基础知识 , 活动testing文档 ,并尝试了下面这个Hello Worldtesting博客 ,尽pipe它是针对Eclipse的。 我无法让testing运行者find并运行我的testing。 我究竟做错了什么?

我仍然不确定的一些问题是:

  1. unit testing方法上面是否需要注释?
  2. 我是否需要在“testing”前添加方法,还是仅用于JUnittesting?
  3. 我可以在nilzor.myapp.tests子包中进行nilzor.myapp.tests吗?

但这篇文章的主要问题是为什么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); } } 

关于你的其他问题:

  1. 不。我的testing仍然运行没有任何注释,但我想这是一个很好的做法,让他们。 它允许您指定要运行的testing的大小。 请参阅Android中的@SmallTest,@MediumTest和@LargeTest批注的用途是什么? 了解更多细节。

  2. 是的,你需要“testing”前缀。 当没有“testing”前缀时,InteliJ给出“方法从不使用”警告,并在testing运行期间跳过该方法。

  3. 是。 我有我的testing组织成子包,它似乎运作良好。

如果这是“突然间”或“5分钟前工作”,我的解决scheme是进入运行/debuggingconfiguration,并删除“Androidtesting”下的任何configuration。 有时,如果我重构被testing的类(例如移动到一个新的包),这些configuration会被破坏。

在这里输入图像说明

以上都没有为我固定。 有什么帮助是遵循指示 :

创build一个testingconfiguration

在Android Studio中:

  • 打开运行菜单 – > 编辑configuration
  • 添加一个新的Androidtestingconfiguration
  • select一个模块
  • 添加一个特定的仪器运行者:

  android.support.test.runner.AndroidJUnitRunner 

运行新创build的configuration。

对于Intellij 15,我通过以下方式解决了这个问题:

  1. 打开“项目结构”设置
  2. 点击“模块”(左侧)
  3. “来源”标签
    一个。 右键单击你的源代码目录(通常是src),点击“Source”。
    湾 右键点击你的testing目录点击'testing'
    C。 右键点击你的出门目录点击“排除”
  4. 转到“path”选项卡
    一个。 点击“使用模块编译输出path”单选button
    湾 为“输出path”select您的输出path目录
    C。 select您的testingpath目录“testing输出path”
  5. 点击确定

我不知道它是否有助于Android Studio,但我有某种Intellij-Gradle冲突。 通过在testing文件上“右键单击”解决它,然后点击“编译文件… Test.java”。 之后,我可以再次运行单个testing。

我有一个类似的问题。 不知道为什么会发生这种情况,但我可以通过在Android Studios中的“File”>“Invalidate Caches / Restart”来修复它。

我在Android Studio 2.3.1上遇到了同样的问题,事实certificate这只是AS的一个bug。 在版本2.2.1上运行相同的testingperformance良好。

如果你只在Cannary频道上运行Android Studio,我build议你也安装一个稳定的版本。 http://tools.android.com/tips/using-multiple-android-studio-versions

我有testing运行良好,直到gradle和android studio升级。

除了在你的testing中添加一个默认的构造函数之外,你可能需要做一些这些工作来让testing套件工作

src/创buildandroidTest/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" /> 

显然,你需要一个目标设备来运行你的testing,因为它们是testing仪器。 出于某些原因,Android工作室有时不会要求您指向此目标设备,而只是提示“空testing套件”消息。 有不同的方法来解决这个问题,这里有几个:

  • 运行你的主应用程序,并select一个目标设备或

  • 转到运行(运行/运行… /编辑configuration)configuration并修改部署目标选项

没有其他解决scheme为我工作,但我能够通过卸载现有的应用程序或testing套件,然后运行testing,得到这个工作。

就我而言,我正在做的项目有几个模块。 我发现这个错误的解决scheme没有帮助我,然后以某种方式我意识到,如果我在build.gradle文件中添加testing依赖项,testing魔术开始工作。 如果您的testing仅存在于其中一个模块中,则无关紧要,两个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' } 

我只是重命名文件,并修复了这个问题。

我有同样的问题,原因是我的testing类没有在类名的末尾testing!

这篇文章帮助我: 空的testing套件

基本上我必须在我的src目录下创build一个package – instrumentTest / java ,并把所有的testing放在那里。 然后我可以单独执行这些testing。

我有一个原始的Java项目发生这种情况。 简单的Java + JUnit4。 它肯定存在于.idea /或.iml文件中。 我把我的报废,重新input,最后testing再次运行。

testing类可以从编译中排除。 在设置编译器 – 排除中修复它。

以下是我在Android Studio突然决定停止运行/debuggingtesting时所经历的debugging步骤(而且男孩经常会这样做,这种情况经常令人难以置信!!):

  • build立:→重build项目
  • 重新启动设备:重新启动您的设备/模拟器,然后重试
  • 设备切换:如果你有一个普通的电话和一个模拟器拔掉一个,并尝试运行只有一个设备
  • Android Studio:文件 – >使caching失效并重新启动
  • 活动监视器/任务pipe理器:按名称sorting进程,看看是否有一个无用的进程使用了​​很多ram,这是一个Android工作室的“鬼”过程,必须杀死
  • git恢复:尝试存储/还原您的最新代码。 有时,Android Studio / gradle错过了一个编译错误,它只会尝试运行不可编译的代码。
  • 卸载然后重新安装Android Studio。

我会添加更多的修补程序,因为我碰到他们!

我什么也没做,问题在半天的痛苦中消失了,我多次打开和closures了项目,每个class都进行了手工testing,也许这个固定了我的testing。

在使用spock框架的Android工作室中,我将Gradle的版本从2.2.2更改为3.2.1,并且一切顺利。

在我的情况下,以前的答案都没有工作。 解决方法是简单地将testing类移到另一个包

这发生在androidTest/

在我的情况下,我在androidTest/java/<package.name>/MyTestingClass ,但是我将当前的构build版本设置为“preproduction”。 有一点! 如Android Studio文档中所述 :

默认情况下,所有testing都是针对debugging构buildtypes运行的。

消息Class not found. Empty test suite. Class not found. Empty test suite. 不断出现,直到我做到这一点:

  1. 将这一行添加到我的AndroidManifest.xml中

     android{ [...] testBuildType "preproduction" } 
  2. 同步gradle。
  3. 删除我以前的testingconfiguration,因为他们没有考虑到这个Gradle同步。

然后我再次执行testing,这次他们跑完美了!

在我的情况下,这个问题是由于我的代码中的错误,实际上是在应用程序类,所以目标活动未打开,testing输出打印

空testing套件错误

我已经尝试直接从terminal运行testing与adb shell am instrument -w -r -e package your.package -e debug false android.support.test.runner.AndroidJUnitRunner 。 有了它,它会为您打印更多关于exception的信息。

接受的答案并没有解决我的问题。 所以我决定复制在Android Studio中默认创build的ExampleInstrumentedTest ,并且运行时没有任何问题,在复制过程中(没有Refactor->复制后重命名)将其重命名,并将unit testing的内容粘贴到它中。 之后,错误消失了。

尝试在Android Studio 3.0项目中运行本地unit testing时遇到“空testing套件”错误。

在阅读了Android Developer 文档之后 ,我很快意识到这个问题是由我的gradleconfiguration引起的,其中包括以下几行。

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

AndroidJUnitRunner类是一个JUnittesting运行器,它允许您在Android设备上运行JUnit 3或JUnit 4样式的testing类。

由于我的testing是本地的,因此不需要在任何设备上运行,删除上面的com.android.support.test …条目使我能够执行unit testing。