testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
这里是sample,使用androidx.test
作为主要测试框架时可以参考。
Android Studio:3.6.1摇篮:gradle-5.6.4-all
我已经准备好测试我的应用程序,发现Android Studio产生了示例单元测试和仪器测试。因此,我右键单击ExampleUnitTest,选择“运行”,它运行得很好。但是,当我对ExampleInstrumentedTest执行此操作时,它失败并显示以下错误消息:
处理结束,退出代码为1找不到类:“ com.example.jbiss.petminder.ExampleInstrumentedTest”
但是,ExampleInstrumentedTest位于默认的androidTest路径(... \ app \ src \ androidTest \ java \ com \ example \ jbiss \ petminder)和ExampleUnitTest] >位于默认test路径(... \ app \ src \ test \ java \ com \ example \ jbiss \ petminder)。
虽然我更改了自动生成的Android Studio源以开始尝试测试编码,但这与找不到类:“ com.example.jbiss.petminder.ExampleInstrumentedTest”]错误无关。这是我修改过的代码(使用自动生成的ExampleInstrumentedTest
代码作为基准):package com.example.jbiss.petminder; import android.content.Context; import com.example.jbiss.petminder.activities.MainActivity; import androidx.test.espresso.accessibility.AccessibilityChecks; import androidx.test.filters.SmallTest; import androidx.test.platform.app.InstrumentationRegistry; import androidx.test.ext.junit.runners.AndroidJUnit4; import androidx.test.rule.ActivityTestRule; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import static androidx.test.espresso.Espresso.onView; import static androidx.test.espresso.action.ViewActions.click; import static androidx.test.espresso.assertion.ViewAssertions.matches; import static androidx.test.espresso.matcher.ViewMatchers.withContentDescription; import static androidx.test.espresso.matcher.ViewMatchers.withId; import static org.junit.Assert.*; /** * Instrumentation test, which will execute on an Android device. * * @see <a href="http://d.android.com/tools/testing">Testing documentation</a> */ @RunWith(AndroidJUnit4.class) @SmallTest public class ExampleInstrumentedTest { @Before public void setUp(){ AccessibilityChecks.enable(); } @Rule public ActivityTestRule<MainActivity> mMainActivityActivityTestRule = new ActivityTestRule<>(MainActivity.class); @Test public void useAppContext() throws Exception { // Context of the app under test. Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext(); assertEquals("com.example.jbiss.petminder", appContext.getPackageName()); onView(withId(R.id.action_add_pet)).perform(click()).check(matches(withContentDescription(R.layout.activity_add_pet))); } }
这是我的应用程序的build.gradle文件:
apply plugin: 'com.android.application' android { compileSdkVersion 28 packagingOptions { exclude 'META-INF/DEPENDENCIES' } buildToolsVersion '28.0.3' defaultConfig { applicationId "com.example.jbiss.petminder" minSdkVersion 24 targetSdkVersion 28 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } compileOptions { encoding "UTF-8" sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } dataBinding { enabled = true } // Gradle automatically adds 'android.test.runner' as a dependency. useLibrary 'android.test.runner' useLibrary 'android.test.base' useLibrary 'android.test.mock' testOptions { unitTests.includeAndroidResources = true } } dependencies { def nav_version = "2.3.0-alpha03" implementation "android.arch.navigation:navigation-fragment-ktx:1.0.0" implementation "android.arch.navigation:navigation-ui-ktx:1.0.0" // Java language implementation: navigation implementation "androidx.navigation:navigation-fragment:$nav_version" implementation "androidx.navigation:navigation-ui:$nav_version" // Dynamic Feature Module Support implementation "androidx.navigation:navigation-dynamic-features-fragment:$nav_version" // Testing Navigation androidTestImplementation "androidx.navigation:navigation-testing:$nav_version" // use -ktx for Kotlin implementation "android.arch.navigation:navigation-ui:$nav_version" // use -ktx for Kotlin //noinspection GradleCompatible implementation 'com.android.support:support-v4:28.1.0' implementation implementation fileTree(include: ['*.jar'], dir: 'libs') implementation 'com.android.support:appcompat-v7:28.1.0' implementation 'androidx.constraintlayout:constraintlayout:1.1.3' implementation 'com.android.support:design:28.1.0' implementation 'com.android.support:cardview-v7:28.1.0' implementation 'androidx.recyclerview:recyclerview:1.1.0' implementation 'com.google.android.material:material:1.1.0' implementation 'com.android.support:mediarouter-v7:28.1.0' /** * directly from https://developer.android.com/topic/libraries/architecture/adding-components#lifecycle */ def lifecycle_version = "2.2.0" def arch_version = "2.1.0" def room_version = "2.2.4" // ViewModel implementation "androidx.lifecycle:lifecycle-viewmodel:$lifecycle_version" // LiveData implementation "androidx.lifecycle:lifecycle-livedata:$lifecycle_version" // Lifecycles only (without ViewModel or LiveData) implementation "androidx.lifecycle:lifecycle-runtime:$lifecycle_version" // Saved state module for ViewModel implementation "androidx.lifecycle:lifecycle-viewmodel-savedstate:$lifecycle_version" // Annotation processor annotationProcessor "androidx.lifecycle:lifecycle-compiler:$lifecycle_version" // alternately - if using Java8, use the following instead of lifecycle-compiler implementation "androidx.lifecycle:lifecycle-common-java8:$lifecycle_version" // optional - helpers for implementing LifecycleOwner in a Service implementation "androidx.lifecycle:lifecycle-service:$lifecycle_version" // optional - ProcessLifecycleOwner provides a lifecycle for the whole application process implementation "androidx.lifecycle:lifecycle-process:$lifecycle_version" // optional - ReactiveStreams support for LiveData implementation "androidx.lifecycle:lifecycle-reactivestreams:$lifecycle_version" // optional - Test helpers for LiveData testImplementation "androidx.arch.core:core-testing:$arch_version" implementation "androidx.lifecycle:lifecycle-reactivestreams:$lifecycle_version" // optional - Test helpers for LiveData testImplementation "androidx.arch.core:core-testing:$arch_version" implementation "androidx.room:room-runtime:$room_version" annotationProcessor "androidx.room:room-compiler:$room_version" // use kapt for Kotlin // optional - RxJava support for Room //implementation "androidx.room:room-rxjava2:$room_version" // optional - Guava support for Room, including Optional and ListenableFuture //implementation "androidx.room:room-guava:$room_version" // Test helpers testImplementation "androidx.room:room-testing:$room_version" testImplementation 'org.testng:testng:6.9.10' // Required -- JUnit 4 framework testImplementation 'junit:junit:4.12' // Optional -- Robolectric environment testImplementation 'androidx.test:core:1.2.0' // Optional -- Mockito framework testImplementation 'org.mockito:mockito-core:2.19.0' implementation 'androidx.appcompat:appcompat:1.1.0' implementation 'com.google.api-client:google-api-client:1.30.2' // Core library androidTestImplementation 'androidx.test:core:1.2.0' // AndroidJUnitRunner and JUnit Rules androidTestImplementation 'androidx.test:runner:1.2.0' androidTestImplementation 'androidx.test:rules:1.2.0' // Assertions androidTestImplementation 'androidx.test.ext:junit:1.1.1' androidTestImplementation 'androidx.test.ext:truth:1.2.0' androidTestImplementation 'com.google.truth:truth:0.42' // Espresso dependencies androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0' androidTestImplementation 'androidx.test.espresso:espresso-contrib:3.2.0' androidTestImplementation 'androidx.test.espresso:espresso-intents:3.2.0' androidTestImplementation 'androidx.test.espresso:espresso-accessibility:3.2.0' androidTestImplementation 'androidx.test.espresso:espresso-web:3.2.0' androidTestImplementation 'androidx.test.espresso.idling:idling-concurrent:3.2.0' // The following Espresso dependency can be either "implementation" // or "androidTestImplementation", depending on whether you want the // dependency to appear on your APK's compile classpath or the test APK // classpath. androidTestImplementation 'androidx.test.espresso:espresso-idling-resource:3.2.0' // debugImplementation because LeakCanary should only run in debug builds. debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.2' // Optional -- Hamcrest library androidTestImplementation 'org.hamcrest:hamcrest-library:1.3' // Optional -- UI testing with UI Automator androidTestImplementation 'androidx.test.uiautomator:uiautomator:2.2.0' } configurations.all { resolutionStrategy.eachDependency { DependencyResolveDetails details -> def requested = details.requested if (requested.group == 'com.android.support') { //if (requested.group == "androidx") { if (!requested.name.startsWith("multidex")) { details.useVersion '25.3.1' } } } }
虽然我的代码中可能还有其他问题,是什么原因导致无法找到该文件中明确声明
文件呢?public class ExampleInstrumentedTest{}
的现有ExampleInstrumentedTest
该代码的格式似乎如Build instrumented unit tests所示
以下未提供答案:
Android Studio:3.6.1 Gradle:gradle-5.6.4-all我已经准备好测试我的应用了,发现Android Studio产生了示例单元测试和仪器测试。因此,我右键单击ExampleUnitTest,选择“运行并...”>
androidx.test
和android.support.test
/ android.test
之间不建议混合使用。将testInstrumentationRunner
更改为以下可以解决问题:testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
这里是sample,使用androidx.test
作为主要测试框架时可以参考。