2016-01-21 9 views
20

Ich habe den ganzen Tag damit verbracht, Junit4-Instrumentierungstests mit Espresso durchzuführen, aber ich scheine diesen letzten Schritt einfach nicht zu bekommen. Egal, was ich mache, wird es die onView() Methode nicht erkennen. Ich habe mehrere SDK/support-lib-Versionen und bisher nichts ausprobiert. Ich habe alle Google-Setup-Guides und viele Stackoverflow-Beiträge durchgegangen und bin hier zu meiner letzten Hoffnung geworden.Espresso-UI-Test erkennt onView nicht()

Gradle Version: com.android.tools.build:gradle:1.5.0

Gradle Datei:

apply plugin: 'com.android.application' 
apply plugin: 'com.google.gms.google-services' 

android { 
    compileSdkVersion 23 
    buildToolsVersion "23.0.2" 
    useLibrary 'org.apache.http.legacy' 

    defaultConfig { 
     applicationId "lv.my.android" 
     minSdkVersion 9 
     targetSdkVersion 22 
     testApplicationId "lv.my.android.tests" 
     testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" 
    } 

    packagingOptions { 
     exclude 'LICENSE.txt' 
     exclude 'META-INF/DEPENDENCIES' 
     exclude 'META-INF/LICENSE' 
     exclude 'META-INF/NOTICE' 
    } 

    compileOptions { 
     sourceCompatibility = 'VERSION_1_7' 
     targetCompatibility = 'VERSION_1_7' 
    } 

    signingConfigs { 
     beta { 
      storeFile file("beta.keystore") 
      storePassword "betabuild" 
      keyAlias "key" 
      keyPassword "betabuild" 
     } 
     release 
    } 

    buildTypes { 
     debug { 
      debuggable true 
      applicationIdSuffix '.debug' 
      versionNameSuffix '-DEV' 
      minifyEnabled false 
     } 

     beta { 
      debuggable true 
      applicationIdSuffix '.beta' 
      versionNameSuffix '-BETA' 
      signingConfig signingConfigs.beta 
      minifyEnabled false 
     } 

     release { 
      minifyEnabled false 
     } 
    } 
} 

dependencies { 
    compile files('src/main/libs/guice-3.0-no_aop.jar') 
    compile files('src/main/libs/javax.inject-1.jar') 
    compile files('src/main/libs/roboguice-2.0.jar') 
    compile files('src/main/libs/junit-4.11.jar') 
    compile files('src/main/libs/hamcrest-core-1.3.jar') 
    compile files('src/main/libs/GeoLib.jar') 
    compile files('src/main/libs/GeoPolygons.jar') 
    compile files('src/main/libs/universal-image-loader-1.9.4.jar') 
    compile files('src/main/libs/javax.annotation-3.2-b06-sources.jar') 
    compile 'uk.co.chrisjenx:calligraphy:2.1.0' 
    compile 'com.squareup:otto:1.3.5' 
    compile 'com.google.android.gms:play-services:6.5.87' 
    compile 'com.android.support:support-annotations:23.0.1' 
    compile 'com.android.support:appcompat-v7:23.0.1' 
    compile 'com.android.support:support-v4:23.0.1' 
    compile 'com.android.support:palette-v7:23.0.1' 
    compile 'com.google.code.findbugs:jsr305:2.0.1' 
    compile 'com.nineoldandroids:library:2.4.0' 
    compile 'pl.charmas.android:android-reactive-location:[email protected]' 
    compile 'io.reactivex:rxjava:1.0.3' 
    compile files('src/main/libs/FlurryAnalytics-6.1.0.jar') 
    compile 'com.github.castorflex.smoothprogressbar:library:1.1.0' 



    androidTestCompile 'com.android.support.test:testing-support-lib:0.1' 
    androidTestCompile'com.android.support.test:runner:0.4.1' 
    // Set this dependency to use JUnit 4 rules 
    androidTestCompile'com.android.support.test:rules:0.4' 
    // Set this dependency to build and run Espresso tests 
    androidTestCompile'com.android.support.test.espresso:espresso-core:2.2.1' 
    testCompile 'junit:junit:4.12' 
    testCompile "org.mockito:mockito-core:1.9.5" 
} 

Mein Test (in src/androidTest/java/lv/my/test)

package lv.my.test; 

import android.support.test.rule.ActivityTestRule; 
import android.support.test.runner.AndroidJUnit4; 
import android.test.suitebuilder.annotation.LargeTest; 
import lv.my.android.activities.LoginActivity; 

import org.junit.Before; 
import org.junit.Rule; 
import org.junit.Test; 
import org.junit.runner.RunWith; 

@RunWith(AndroidJUnit4.class) 
@LargeTest 
public class LoginActivityTest { 

    private String mStringToBetyped; 

    @Rule 
    public ActivityTestRule<LoginActivity> mActivityRule = new ActivityTestRule<>(LoginActivity.class); 

    @Before 
    public void initValidString() { 

    } 

    @Test 
    public void changeText_sameActivity() { 
//  onView not recognized here 

    } 
} 

PS. Ich benutze Roboguice könnte das das Problem sein?

+4

Versuchen Sie, Import-Anweisung als 'import static android.support.test.espresso.Espresso.onView;' – Raghunandan

Antwort

44

sollten Sie entweder einen statischen Import verwenden:

import static android.support.test.espresso.Espresso.onView; 

oder

import android.support.test.espresso.Espresso; 

und nennen es in der folgenden Art und Weise

Espresso.onView() 
+6

Wow, es funktionierte . Keines der Beispiele oder Tutorials erwähnt dies, es hat nur gezeigt, dass es out-of-the-box funktioniert. Also habe ich das funktioniert 'Espresso.onView (ViewMatchers.withId (R.id.registerButton))' – somerandomusername

+2

Also warum sagt es nichts hier drin: http://developer.android.com/training/testing/ ui-testing/espresso-testing.html # build – somerandomusername

+8

Stimmen Sie zu, es wäre gut für sie, die Importe zu erwähnen. – Egor

8

zu verlängern, was Egor vorgeschlagen hat, in Android Studio, sobald Sie roten Text bei onView() bekommen, drücken Sie einfach alt + geben Sie ein, als die rote Glühbirne auftauchte. Wählen Sie dann statischen Import.

+4

+1 das funktioniert. Ein faszinierender Schlüsselstrich. Ich habe auch Probleme mit withId und tat genau so, wie Sie erwähnt haben, und es schlug vor, mit 'matchers.ViewMatchers' zu importieren. Danke vielmals! –

0

Schreiben Sie weiter. Android Studio schlägt die benötigten Espresso-Importe vor, von innen nach außen. Zum Beispiel: OnView (withId()) Erste withId erkennt(), dann OnView()