为什么Android测试运行器报告“空测试套件”()

提兵百万西湖上,立马吴山第一峰!这篇文章主要讲述为什么Android测试运行器报告“空测试套件”?相关的知识,希望能为你提供帮助。
我正在试图找出IntelliJ / android报告“空测试套件”的原因。我有一个带有两个IntelliJ模块的小项目(Eclipse中的“Projects”)。 Unit测试模块有自己的AndroidManifest.xml,我在底部粘贴了它。我试图运行ActivityUnitTestCase,因为测试将取决于Context对象。
主模块的包名是qazxsw poi。测试模块的包名是qazxsw poi
为什么测试运行员没有检测到nilzor.myapp方法作为测试?

nilzor.myapp.tests

这是我的测试课:
testBlah()

我已经阅读了< ?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); } } ,并尝试遵循这个testing fundamentals,即使它是为Eclipse。我无法让测试运行员找到并运行我的测试。我究竟做错了什么?
我仍然不确定的一些问题是:
  1. 我是否需要单元测试方法之上的注释?
  2. 我需要在方法前加上“test”,还是仅用于JUnit测试?
  3. 我可以在activity testing document的子包中进行测试吗?
但是这篇文章的主要问题是为什么测试运行器没有检测到我的测试?
答案【为什么Android测试运行器报告“空测试套件”()】您需要为测试类提供默认构造函数,例如:
Hello world test blog

关于你的其他问题:
  1. 不。我的测试仍然没有任何注释,但我想这是一个很好的做法。它允许您指定要运行的测试的大小。有关详细信息,请参阅nilzor.myapp.tests
  2. 是的,你需要“测试”前缀。当没有“test”前缀时,IntelliJ会给出“从未使用过的方法”警告,并在测试运行期间跳过该方法。
  3. 是。我将我的测试组织成子包,它似乎运行良好。
另一答案就我而言,之前的答案都没有奏效。解决方案是简单地将测试类移动到另一个包。
这发生在AndroidManifest.xml
另一答案在我的情况下,问题是由于我的代码中的错误引起的,实际上是在应用程序类中,因此目标活动未打开并且测试输出打印
空测试套件错误
我已尝试直接从终端使用 < instrumentation android:name="android.test.InstrumentationTestRunner" android:label="Tests for my packaged app" android:targetPackage="< my-package-name> .test" /> 运行测试。有了它,它会为您打印更多关于异常的信息。
另一答案我有这个问题,因为我在build.gradle中有这个:
androidTest/

即使我没有使用Android Test Orchestrator(必须错误地复制教程)。
评论说出来为我解决了。
另一答案其他解决方案都没有为我工作,但我只需卸载现有的应用程序或测试套件,然后运行测试就可以实现这一点。
另一答案就我而言,我正在开发的项目有几个模块。我发现这个错误的解决方案都没有帮助我,然后我意识到,如果我在build.gradle文件的两个中添加了测试依赖项,那么测试就会神奇地开始工作。如果您的测试仅存在于其中一个模块中,则无关紧要,两个gradle文件都必须包含依赖项和testInstrumentationRunner值。
所以,如果像我一样,其他答案都没有帮助过你,请尝试将这些行添加到每个模块的build.gradle文件中:
adb shell am instrument -w -r-e package your.package -e debug false android.support.test.runner.AndroidJUnitRunner

然后还添加:
testOptions { execution "ANDROID_TEST_ORCHESTRATOR" }

另一答案我只是重命名了文件并修复了问题。
另一答案我有同样的问题,原因是我的测试类在类名末尾没有测试!
另一答案我的问题是由我的测试用例的android { .... defaultConfig { ... testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } } 方法抛出异常引起的。它有些不会导致测试失败 - 我只是通过检查logcat输出找到它。
我修复了异常,突然我的测试运行了!
另一答案在面对今天的问题 - 无法运行带有空套件错误的检测Android测试 - 我发现了关于这个问题的git问题,并且感谢Stephan Linzner,我可以运行测试。
tl; dr您必须右键单击测试包而不是类才能使测试运行。
参考: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'}
另一答案这篇文章帮助了我:@BeforeClass
基本上我必须在我的src目录下创建一个包 -instrumentTest / java- 并将所有测试放在那里。然后我可以单独执行这些测试。
另一答案如果这种情况“突然发生”或“它在5分钟前工作”我的解决方案是进入运行/调试配置并删除“Android测试”下的任何配置。如果我重构被测试的类(例如,移动到新的包),有时这些配置会被破坏。
package nilzor.myapp.tests; public class NilzorSomeTest extends ActivityUnitTestCase< ActivityYouWantToTest> { public NilzorSomeTest(){ super(ActivityYouWantToTest.class); }@SmallTest public void testBlah(){ assertEquals(1,1); } }
另一答案我有一个原始的Java项目,正在发生这种情况。简单的Java + JUnit4。它绝对存在于.idea /或.iml文件中。我废弃了我,重新导入,最后测试再次运行。
另一答案测试类可能会从编译中排除。修复它在setup-compiler-exclude中。
另一答案以下是我在Android Studio突然决定停止运行/调试测试时所经历的调试步骤(而且男孩经常这种情况经常发生!):
  • 构建:→重建项目
  • 重启设备:重启设备/模拟器,然后重试
  • 设备切换:如果您同时使用常规手机和模拟器,请拔掉一个并尝试仅使用其中一个设备运行它
  • Android Studio:文件 - > 使缓存无效并重新启动
  • 活动监视器/任务管理器:按名称对进程进行排序,看看是否有一个无名进程占用了很多ram,这是Android工作室的一个“鬼”进程必须被杀死
  • git revert:尝试存储/恢复您的最新代码。有时会出现Android Studio / gradle未命中的编译错误,它只会尝试运行无法编译的代码。
  • 卸载然后重新安装Android Studio。
当我遇到它们时,我会添加更多修复程序!
另一答案我没有做任何事情,经过半天的痛苦后问题就消失了,我多次打开并关闭项目,手动运行每个班级测试,也许这就解决了我的问题。
另一答案在带有spock框架的Android工作室中,我将gradle的版本从2.2.2更改为3.2.1,一切顺利。
另一答案接受的答案并没有解决我的问题。所以我决定复制在Android Studio中默认创建的https://github.com/googlecodelabs/android-testing/issues/27#issuecomment-219074863并且没有任何问题地运行,在复制过程中重命名它(复制后没有Refactor-> 重命名!)并将我的单元测试的内容粘贴到其中。之后,错误消失了。
另一答案尝试在我的Android Studio 3.0项目中运行本地单元测试时,我遇到了“空测试套件”错误。
在阅读了Android Developer Empty test suite之后,我很快意识到这个问题是由我的gradle配置引起的,其中包括以下几行。
ExampleInstrumentedTest

AndroidJUnitRunner类是一个JUnit测试运行器,允许您在Android设备上运行JUnit 3或JUnit 4样式的测试类。
由于我的测试是本地的,因此不需要在任何设备上运行,因此删除上面的com.android.support.test ...条目使我能够执行单元测试。
另一答案我在@BeforeClass方法中在db中进行了一些插入。我意识到我有一个对象/数据库映射问题。这个数据映射问题是我这个问题的原因。
另一答案就我而言,我在documentation进行了仪器化测试,但是我将当前的构建版本设置为“preproduction”。有重点!如testImplementation 'com.android.support.test:runner:0.5' testImplementation 'com.android.support.test:rules:0.5' 中所述:
默认情况下,所有测试都针对调试版本类型运行。
消息androidTest/java/< package.name> /MyTestingClass一直出现,直到我这样做:
  1. 将此行添加到我的build.gradle: Android Studio documentation
  2. 同步的gradle。
  3. 删除以前的测试配置,因为它们不考虑此Gradle同步。
然后我再次执行测试,这次他们运行得非常完美!!!
另一答案当我错误地使用注释Class not found. Empty test suite.标记非模拟类变量时,我发生了这种情况。删除了注释并且测试成功运行。这发生在Android Studio上的Junit 4.5上
另一答案以上都没有为我修好。有什么帮助是What is the purpose of @SmallTest, @MediumTest, and @LargeTest annotations in Android?:
创建测试配置
在Android Studio中:
  • 打开运行菜单 - > 编辑配置
  • 添加新的Android测试配置
  • 选择一个模块
  • 添加特定的仪表运行器:

android.support.test.runner.AndroidJUnitRunner

运行新创建的配置。
另一答案不是解决方案,而是一种可以让您快速回到正轨的解决方法:
  1. 首先,找一个有效的测试。我正在编写一个新测试,我得到了“空测试套件”错误。我跑了其他测试,他们像往常一样工作。
  2. 复制有效的测试文件。运行它以确保此副本的工作方式与原始副本相同。
  3. 取下机身并用新的测试代码替换它。
测试现在应该可行。
我们花了大约两个小时试图找到原因但无济于事。
另一答案我有一个类似的问题。不知道为什么会发生这种情况但是我能够通过在Android Studio中找到“文件”> “使缓存无效/重新启动”来修复它。
另一答案我不知道它是否对Android Studio有帮助,但我遇到了某种Intellij-Gradle冲突。通过在测试文件上“右键单击”并点击“编译文件... Test.java”来解决它。之后我可以再次进行单一测试。
另一答案我在Android Studio 2.3.1上遇到了同样的问题,原来这只是AS的一个错误。在版本2.2.1上运行相同的测试表现良好。
如果您只在Cannary频道上运行Android Studio,我建议您也安装稳定版本。
为什么Android测试运行器报告“空测试套件”()

文章图片

另一答案我有测试运行正常,直到

    推荐阅读