J'essaie de résister aux tests expresso mais je reçois toujours cette erreur:
INSTRUMENTATION_STATUS: Error=Unable to find instrumentation info for: ComponentInfo{com.mikeestrada.test/Android.test.InstrumentationTestRunner}
Cela a fonctionné une fois, mais je n'arrive pas à recréer correctement les rapports. Ils sont juste vides, n'ont rien testé. J'ai essayé une pléthore de commandes, y compris
adb Shell am instrument -w -r com.mikeestrada.test/Android.test.InstrumentationTestRunner
et
adb Shell am instrument -w -r com.mikeestrada.test/com.google.Android.apps.common.testing.testrunner.GoogleInstrumentation TestRunner
Voici mes extraits de code:
<?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"/>
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!")));
}
}
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'
}
Si cela signifie quelque chose - les attributs de <instrumentation>
dans le manifeste sont colorés en rouge comme si IntelliJ ne les reconnaissait pas.
Toute aide est super, merci!
Vous devez vérifier quels packages d'instrumentation ont été installés sur votre appareil:
adb Shell pm list instrumentation
Vérifiez ensuite si com.mikeestrada.test y figure réellement.
En regardant votre fichier build.gradle, le problème est en fait que vous n'avez pas la configuration suivante dans la section defaultConfig:
testInstrumentationRunner "com.google.Android.apps.common.testing.testrunner.GoogleInstrumentationTestRunner"
L'espresso nécessite GoogleInstrumentationTestRunner
pour fonctionner.
De plus, avec un système de construction Gradle, vous ne devriez pas avoir besoin d'un AndroidManifest.xml
pour le projet de test car il est généré automatiquement.
En outre, le package de votre application semble être com.mikeestrada
. Donc, dans AndroidManifest, définissez Android:targetPackage
comme Android:targetPackage="com.mikeestrada"
.
J'espère que cela vous aidera.
Le problème est que vous manquez un espace:
instrumentationandroid:name
devrait être
instrumentation Android:name