gradle uiautomator教學 - 無法解析符號'AndroidJUnit4'




espresso androidx (9)

很明顯,我需要正確的導入聲明來解決這個問題。 根據AndroidJUnit4文檔 ,這應該是

import android.support.test.runner.AndroidJUnit4;

當我這樣做時,Android Studio會突出顯示紅色runner並抱怨“無法解析符號'跑步者'”。

背景

我遵循Android開發者網站上的教程來設置使用UI Automator的測試 。 我遇到的第一個問題是com.android.support:support-v4:22.2.0com.android.support.test:runner:0.2取決於不同版本的com.android.support:support-annotations 。 我遵循這個Android bug報告的建議,並將以下內容添加到我的項目allprojects中的所有項目中:

configurations.all {
    resolutionStrategy.force 'com.android.support:support-annotations:22.1.0'
}

這解決了直接的錯誤,但我懷疑它會導致我目前的問題。 有沒有人有任何關於如何解決這個問題的建議?

`./gradlew:app:dependencies的相關章節

androidTestCompile - Classpath for compiling the androidTest sources.
+--- com.jayway.android.robotium:robotium-solo:5.2.1
+--- com.squareup:fest-android:1.0.8
|    \--- org.easytesting:fest-assert-core:2.0M10
|         \--- org.easytesting:fest-util:1.2.5
+--- com.android.support.test:runner:0.2
|    +--- junit:junit-dep:4.10
|    |    \--- org.hamcrest:hamcrest-core:1.1
|    +--- com.android.support.test:exposed-instrumentation-api-publish:0.2
|    \--- com.android.support:support-annotations:22.0.0 -> 22.2.0
+--- com.android.support.test:rules:0.2
|    \--- com.android.support.test:runner:0.2 (*)
\--- com.android.support.test.uiautomator:uiautomator-v18:2.1.0

compile - Classpath for compiling the main sources.
+--- com.android.support:appcompat-v7:22.2.0
|    \--- com.android.support:support-v4:22.2.0
|         \--- com.android.support:support-annotations:22.2.0
+--- com.android.support:support-v4:22.2.0 (*)
+--- com.google.android.gms:play-services:6.1.71
|    \--- com.android.support:support-v4:20.0.0 -> 22.2.0 (*)
+--- com.crashlytics.android:crashlytics:1.+ -> 1.1.13
\--- com.jakewharton:butterknife:5.1.2

Answers

好的,這是你的錯誤和我的!

如果我們要為本地單元測試編寫一些代碼,我們不應該使用@RunWith(AndroidJUnit4.class)因為我們不使用AndroidJUnit4,但我們需要Junit4。 所以我們應該寫@RunWith(JUnit4.class) 。 當然你的java測試文件在app/src/test/java/your.package.name目錄下。

否則,如果(!!)我們想要編寫一些Android Instrumentation Unit Test,我們應該將我們的測試java文件放在app/src/androidTest/java/your.package.name目錄中並使用@RunWith(AndroidJUnit4.class)


在我的情況下,這有助於發布版本:

android {
    ...
    testBuildType "release" 
}

我犯了錯誤,把測試類放在src / test 。 將它們移動到src / androidTest / java /之後 ,解析了依賴關係。


我在here發現,測試支持庫有比我使用的更新的版本:

dependencies {
    androidTestCompile 'com.android.support.test:runner:0.5'
    androidTestCompile 'com.android.support.test:rules:0.5'
    androidTestCompile 'com.android.support.test.uiautomator:uiautomator-v18:2.1.2'
}

注意:請務必使用這些庫的最新版本。 這個問題是從Android測試支持庫是新的,並且這裡的版本號已經過時的時候開始的。


我通過在應用程序的build.gradle文件中進行小小更改來解決問題。 在dependencies { ... }部分中,確保包含以下行:

debugImplementation 'com.android.support.test:runner:1.0.1'

或者是當時最新版本的任何版本( ...Compile已被棄用,並已被替換為...Implementation )。 請注意使用debugImplementation 。 Android Studio建議自動將其與androidTestImplementation一起androidTestImplementation ,但這種方法無效。

我發現如何通過在應用程序模塊的依賴項下的項目結構中查看如何將其從測試更改為調試,您可以在其中更改每個依賴項的範圍,請參見下文。


把這段代碼放到你的依賴關係中

compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
    exclude group: 'com.android.support', module: 'support-annotations'
})

確保您的應用程序在調試版本變體中。 轉到生成>選擇生成變體...並顯示以下內容:


如果有人仍然有這個問題無法解析符號'AndroidJUnit4'和使用API​​ 27添加在應用程序模塊中的build.gradle下面:

**testImplementation 'junit:junit:4.12'**

// AndroidJUnitRunner and JUnit Rules
androidTestImplementation 'com.android.support.test:runner:1.0.1'
androidTestImplementation 'com.android.support.test:rules:1.0.1'

// Espresso dependencies
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'

你有沒有添加compile 'com.google.android.gms:play-services:7.0.0' build.gradle? 你可以在這裡找到更多的指導。 希望這個幫助。





android gradle build.gradle android-uiautomator testing-support-library