I have spent all day setting up Junit4 instrumentation tests with Espresso, but just can't seem to get that final step. No matter what I do it won't recognize the onView()
method. I have tried multiple SDK/support-lib versions and so far nothing. I have gone through all the google setup guides and many stackoverflow posts, turning here as my last hope.
Gradle version : com.android.tools.build:gradle:1.5.0
Gradle file:
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:0.4@aar' 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" }
My test (located 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. I use roboguice could that be the issue?
check is a method which accepts an argument of type ViewAssertion and do assertion using passed in ViewAssertion object. matches(withText(“Hello”)) returns a view assertion, which will do the real job of asserting that both actual view (found using withId) and expected view (found using withText) are one and the same.
Latest development (Android 9.0, API level 28 or higher) of espresso testing framework will be done in AndroidX library. testInstrumentationRunner in the android/defaultConfig sets AndroidJUnitRunner class to run the instrumentation tests.
You should either use a static import:
import static android.support.test.espresso.Espresso.onView;
or
import android.support.test.espresso.Espresso;
and call it in the following way
Espresso.onView()
To extend what Egor has suggested, in Android Studio, once you get red text at onView()
, simply press alt+enter when the red bulb popped up. Then choose static import.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With