2016-01-21 10 views
20

Spędziłem cały dzień na ustawianiu testów instrumentacji Junit4 z Espresso, ale po prostu nie wydaje się, aby uzyskać ostatni krok. Bez względu na to, co zrobię, nie rozpoznaje metody onView(). Próbowałem wielu wersji SDK/support-lib i jak dotąd nic. Przeszedłem przez wszystkie przewodniki instalacji Google i wiele postów stackoverflow, zwracając się tutaj jako moja ostatnia nadzieja.Testowanie Espresso UI nie rozpoznaje onView()

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

Gradle plik:

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" 
} 

Mój próbny (znajduje się w 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. Używam roboguice, czy to może być problem?

+4

spróbuj dodać instrukcję importu jako 'import static android.support.test.espresso.Espresso.onView;' – Raghunandan

Odpowiedz

44

Należy użyć statycznego importowania:

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

lub

import android.support.test.espresso.Espresso; 

i nazwać go w następujący sposób

Espresso.onView() 
+6

Wow, zadziałało . Żaden z przykładów ani samouczków nie wspomniał o tym, po prostu pokazał, że powinien on działać po wyjęciu z pudełka. Więc mam działające 'Espresso.onView (ViewMatchers.withId (R.id.registerButton))' – somerandomusername

+2

Dlaczego więc nie mówi nic na ten temat tutaj: http://developer.android.com/training/testing/ ui-testing/espresso-testing.html # build – somerandomusername

+8

Zgadzam się, byłoby dobrze dla nich wspomnieć o imporcie. – Egor

8

przedłużyć co Egor zasugerował w Androidzie Studio, gdy pojawi się czerwony tekst na onView(), po prostu naciśnij alt + wpisz, gdy pojawi się czerwona żarówka. Następnie wybierz statyczny import.

+4

+1. Fascynujący kluczowy skok. Mam również problem z withId i zrobiłem to, o czym wspomniałeś, i zasugerowałeś statyczny import z 'matchers.ViewMatchers'. Wielkie dzięki! –

0

Kontynuuj pisanie. Android Studio zasugeruje potrzebny import Espresso, od "na lewą stronę". Na przykład: onView (withId()) Najpierw wykryje withId(), następnie onView()