每当我尝试运行测试时,控制台都说:
Running tests
Test running startedTest running failed: Unable to find instrumentation info for:
ComponentInfo{com.employeeappv2.employeeappv2.test/android.test.InstrumentationTestRunner}
Empty test suite.
我已经坚持了一段时间,到目前为止我在网上看到的解决方案没有帮助。我的项目结构设置如下:
*主模块-src * instrumentTest -java * main -java -manifest * build.gradle
我的build.gradle文件如下所示:
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.9.+'
}
}
apply plugin: 'android'
repositories {
mavenCentral()
}
android {
compileSdkVersion 19
buildToolsVersion "19.1.0"
defaultConfig {
minSdkVersion 16
targetSdkVersion 19
versionCode 1
versionName "2.1.0"
testPackageName "login.test"
testInstrumentationRunner "android.test.InstrumentationTestRunner"
}
buildTypes {
release {
runProguard false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard- rules.txt'
}
}
packagingOptions {
exclude 'META-INF/LICENSE'
exclude 'META-INF/NOTICE'
exclude 'META-INF/notice.txt'
exclude 'META-INF/license.txt'
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile files('libs/scandit.zip')
compile project(':pullToRefresh')
compile 'com.android.support:appcompat-v7:19.+'
compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.1+'
compile 'org.springframework.android:spring-android-rest-template:1.0.1+'
compile 'org.json:json:20090211'
compile 'com.fasterxml.jackson.core:jackson-databind:2.3.1'
compile 'com.fasterxml.jackson.core:jackson-annotations:2.3.0'
compile 'com.fasterxml.jackson.core:jackson-core:2.3.1'
compile 'com.android.support:support-v4:19.1.+'
compile 'com.mcxiaoke.volley:library:1.0.+@aar'
androidTestCompile 'junit:junit:3.8'
}
您是否需要为测试目录提供单独的清单?如果是这样的话会是什么样子?
编辑:我尝试将一个清单添加到我的instrumentTest目录,没有运气。请注意,我无法使用IntelliJ来解析targetPackage名称,因此它显示为红色。
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.employeeappv2.employeeappv2.src.instrumentTest"
android:versionCode="1"
android:versionName="1.0.0">
<application>
<uses-library android:name="android.test.runner" />
</application>
<instrumentation
android:name="android.test.InstrumentationTestRunner"
android:targetPackage="com.employeeappv2.employeeappv2.src.main"/>
</manifest>
我正在使用Android Studio 1.1,以下步骤为我解决了这个问题:
Run - Edit Configurations - Android Tests
将instrumentation runner命名为android.test.InstrumentationTestRunner
Android Instrumentation Tests
。build.gradle中不需要testInstrumentationRunner,清单文件中不需要检测标记。
我的问题的解决方案是更改方法名称
@Test
public void test() {
...
}
至
@Test
public void testSomething() {
...
}
希望它可以帮助某人。
当我尝试将multiDexEnabled true
添加到build.gradle
时,我遇到了同样的错误。
我在这里添加了我的经验,因为这是使用... Unable to find ... ComponentInfo ...
错误消息搜索时的第一个Google点击之一。
在我的情况下像这里添加testInstrumentationRunner
做了诀窍:
...
android {
...
defaultConfig {
...
testInstrumentationRunner "com.android.test.runner.MultiDexTestRunner"
}
}
(我有com.android.tools.build:gradle:1.5.0
)
当我创建一个新包时,Studio创建了一个ApplicationTest类。以us.myname.mypackage为例,创建了以下目录结构:
app/[myPackage]/src/androidTest/java/us/myname/mypackage/ApplicationTest.class
最初它开箱即用。我安装产品口味后就退出了工作。我随后对build.gradle进行了以下更改:
defaultConfig {
...
testInstrumentationRunner "android.test.InstrumentationTestRunner"
}
有些人更喜欢
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
(使用我当前的配置,我必须在调试时使用...InstrumentationTestRunner
,并在使用发布版本类型时使用AndroidJUnitRunner
。)
以上配置仅适用于调试版本类型。如果您希望将它与发行版或自定义构建类型一起使用,则可以在build.gradle中包含以下内容:
buildTypes {
release {
...
}
debug {
...
}
}
testBuildType "release"
在Studio左下角的Build Variants选项卡中,确保选择了Android Instrumentation Tests
并选择了正确的buildType
。
对于它的价值,当我使用常规测试运行器创建自定义测试运行器后,AS 2.3被挂断了。我得到了与问题中发布的相同的错误。
删除所有Android Instrumented测试的调试配置并重建修复它。我相信问题在于你不再可以在Debug Configurations中选择自定义跑步者,因为它很可能是通过gradle构建的。
我不得不做VikingGlen的answer,Liuting的answer和this答案的组合。此答案适用于Android Studio 2.1版。
build.gradle
(包含所有依赖项的那个)中,放下:
defaultConfig {
testInstrumentationRunner 'android.support.test.runner.AndroidJUnitRunner'
}
然后它可以运行这种类型的测试:
@RunWith(AndroidJUnit4.class)
@LargeTest
public class ApplicationTest {
@Rule
public ActivityTestRule<MainActivity> mActivityTestRule = new ActivityTestRule<>(MainActivity.class);
@Test
public void login() {
//Open Drawer to click on navigation.
onView(withId(R.id.drawer_layout))
.check(matches(isClosed(Gravity.LEFT))) // Left Drawer should be closed.
.perform(open()); // Open Drawer
}
}
所以主要的问题是,当我在/ src /下创建一个androidTest文件夹时,它没有被IntelliJ选为测试的源文件夹(java子目录应该变为绿色)。我使用的是IntelliJ 13.0.3,升级到13.1.3之后,我的所有麻烦都消失了。
*注意:不要尝试在您的androidTest文件夹中添加清单,Gradle文档明确声明在创建androidTest文件夹时应该自动生成清单。对我来说问题是由于IntelliT / Gradle没有识别androidTest而没有生成文件,因此抛出了无检测错误。
我遇到了这个问题并通过左上角的Run - > Edit Configurations - > Green'+'按钮修复了它 - > JUnit
从那里,将'使用classpath mod ...'设置为'app'(或者你的默认应用名称,这是运行应用程序时显示在运行左侧的那个(播放按钮))
最后,将您的测试类名称放在'class:'文本框中。点击申请即可。
此时,如果测试类没有其他错误,它应该工作。
这是我在我的项目中注意到的,在我的app(主)模块build.gradle中,我有以下buildType配置
buildTypes {
debug {
multiDexEnabled true
}
mock {
initWith(buildTypes.debug)
}
}
testBuildType "mock"
当我使用AndroidJUnitRunner作为测试运行器(均来自Android Studio)和build.gradle中的testInstrumentationRunner时,测试顺利进行。
在具有multiDexEnabled的子模块中,为true,为defaultConfig
defaultConfig {
multiDexEnabled true
....
}
我遇到了问题
Test running startedTest running failed: Unable to find instrumentation info for:{mypackage.x.y/android.support.test.runner.AndroidJUnitRunner"}
当我在IDE和子模块build.gradle中指定AndroidJUnitRunner时。通过在IDE / build.gradle中指定MultiDexTestRunner作为测试运行器来解决这个问题。
总而言之,使用MultiDexTestRunner在build.gradle中指定multiDexEnabled true时运行测试,否则使用AndroidJUnitRunner作为测试运行器。
确保已为所有用户卸载应用程序。
转到设置 - >应用程序(所有应用程序) - >如果您的应用程序在那里,然后点击它 - >菜单 - >卸载所有用户。
我的问题是该应用程序曾在某一时刻卸载,但仍在设备上;意味着没有为所有用户卸载它。 (另一个问题,不知道如何解决。我是我设备上唯一的用户)
因此,应用程序将无法重新安装,测试套件无法运行。