为什么Android测试运行器报告“空测试套件”?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么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。我无法让测试运行员找到并运行我的测试。我究竟做错了什么?
我仍然不确定的一些问题是:
- 我是否需要单元测试方法之上的注释?
- 我需要在方法前加上“test”,还是仅用于JUnit测试?
- 我可以在activity testing document的子包中进行测试吗?
但是这篇文章的主要问题是为什么测试运行器没有检测到我的测试?
您需要为测试类提供默认构造函数,例如:
Hello world test blog
关于你的其他问题:
- 不。我的测试仍然没有任何注释,但我想这是一个很好的做法。它允许您指定要运行的测试的大小。有关详细信息,请参阅
nilzor.myapp.tests
。 - 是的,你需要“测试”前缀。当没有“test”前缀时,IntelliJ会给出“从未使用过的方法”警告,并在测试运行期间跳过该方法。
- 是。我将我的测试组织成子包,它似乎运行良好。
就我而言,之前的答案都没有奏效。解决方案是简单地将测试类移动到另一个包。
这发生在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
一直出现,直到我这样做:
- 将此行添加到我的build.gradle: Android Studio documentation
- 同步的gradle。
- 删除以前的测试配置,因为它们不考虑此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
运行新创建的配置。
不是解决方案,而是一种可以让您快速回到正轨的解决方法:
- 首先,找一个有效的测试。我正在编写一个新测试,我得到了“空测试套件”错误。我跑了其他测试,他们像往常一样工作。
- 复制有效的测试文件。运行它以确保此副本的工作方式与原始副本相同。
- 取下机身并用新的测试代码替换它。
测试现在应该可行。
我们花了大约两个小时试图找到原因但无济于事。
我有一个类似的问题。不知道为什么会发生这种情况但是我能够通过在Android Studio中找到“文件”>“使缓存无效/重新启动”来修复它。
我不知道它是否对Android Studio有帮助,但我遇到了某种Intellij-Gradle冲突。通过在测试文件上“右键单击”并点击“编译文件... Test.java”来解决它。之后我可以再次进行单一测试。
我在Android Studio 2.3.1上遇到了同样的问题,原来这只是AS的一个错误。在版本2.2.1上运行相同的测试表现良好。
如果您只在Cannary频道上运行Android Studio,我建议您也安装稳定版本。
我有测试运行正常,直到Android Espresso 测试:找不到类:...空测试套件
Android Studio 为 AndroidTestCase 说“空测试套件”[重复]
找不到类,使用 Android Studio 3.0.1、Room、Kotlin 的 androidTest 中的空测试套件