I am trying to stand up espresso tests but I keep getting this error:
INSTRUMENTATION_STATUS: Error=Unable to find instrumentation info for: ComponentInfo{com.mikeestrada.test/android.test.InstrumentationTestRunner}
It worked once, but I can't get the reports to recreate correctly. They are just blank, didn't test anything. I've tried a plethora of commands including
adb shell am instrument -w -r com.mikeestrada.test/android.test.InstrumentationTestRunner
and
adb shell am instrument -w -r com.mikeestrada.test/com.google.android.apps.common.testing.testrunner.GoogleInstrumentation TestRunner
Here are my code snippets:
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.myapplication"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="7"
android:targetSdkVersion="19" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.myapplication.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<instrumentationandroid:name="com.google.android.apps.common.testing.testrunner.GoogleInstrumentationTestRunner"
android:targetPackage="com.mikeestrada.test"/>
TestStartScreen.java
package com.mikeestrada.test;
import android.test.ActivityInstrumentationTestCase2;
import android.test.ActivityUnitTestCase;
import android.test.AndroidTestCase;
import android.test.suitebuilder.annotation.LargeTest;
import android.view.View;
import com.example.myapplication.MainActivity;
import com.example.myapplication.R;
import com.google.android.apps.common.testing.ui.espresso.Espresso;
import com.google.android.apps.common.testing.ui.espresso.ViewAssertion;
import com.google.android.apps.common.testing.ui.espresso.ViewInteraction;
import com.google.android.apps.common.testing.ui.espresso.action.ViewActions;
import com.google.android.apps.common.testing.ui.espresso.assertion.ViewAssertions;
import com.google.android.apps.common.testing.ui.espresso.matcher.ViewMatchers;
import junit.framework.Assert;
import org.hamcrest.Matcher;
public class TestStartScreen extends ActivityInstrumentationTestCase2<MainActivity> {
public TestStartScreen() {
super(MainActivity.class);
}
@LargeTest
public void testHelloWorld(final Matcher<View> viewMatcher) {
// Find
//ViewInteraction button1 = onView(ViewMatchers.withId(R.id.button1)); // Find the button
ViewInteraction helloWorldText = Espresso.onView(ViewMatchers.withText("Hello world!")); // Find the text
// Action
//button1.perform(ViewActions.click()); // Click the button
helloWorldText.perform(ViewActions.typeText("Bye World!"));
Espresso.onView(ViewMatchers.withText(R.id.withText));
// Check
helloWorldText.check(ViewAssertions.matches((ViewMatchers.isDisplayed()))); // Hello world text is hidden
//Espresso.onView(withId(R.id.my_view)).check(matches(withText("Hello world!")));
}
}
build.gradle
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.7.+'
}
}
apply plugin: 'android'
repositories {
mavenCentral()
}
android {
compileSdkVersion 19
buildToolsVersion "19.0.0"
defaultConfig {
minSdkVersion 7
targetSdkVersion 19
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_7
targetCompatibility JavaVersion.VERSION_1_7
}
sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
assets.srcDirs = ['assets']
}
}
}
dependencies {
compile 'com.android.support:appcompat-v7:+'
instrumentTestCompile files('libs/espresso-1.1-bundled.jar')
}
android {
defaultConfig {
testInstrumentationRunner "com.google.android.apps.common.testing.testrunner.GoogleInstrumentationTestRunner"
}
}
task wrapper (type: Wrapper) {
gradlerVersion = '1.9'
}
If it means anything - the attributes of <instrumentation>
in the manifest are colored red as if IntelliJ does not recognize them.
Any help is great, thanks!
The issue is that you are missing a space:
should be
You need to check which instrumentation packages have been installed on your device:
Then verify whether com.mikeestrada.test is actually listed there.
Also, looks like yours app package is
com.mikeestrada
. So in AndroidManifest setandroid:targetPackage
asandroid:targetPackage="com.mikeestrada"
.I hope this will help.
Looking at your build.gradle file, the problem is actually that you don't have the following configuration in the defaultConfig section:
Espresso requires
GoogleInstrumentationTestRunner
in order to work.Also with a gradle build system you shouldn't need an
AndroidManifest.xml
for the test project because it is auto generated.From the above answers if the instrumentation package is missing install it with the following command: