android - tutorial - uiautomator教學




無法解析符號“ AndroidJUnit4” (10)

顯然,我需要正確的導入語句才能解決此問題。 根據 AndroidJUnit4 文檔 ,這應該是

import android.support.test.runner.AndroidJUnit4;

當我這樣做時,Android Studio會以紅色突出顯示運行器,並抱怨“無法解析符號“運行器””。

背景

至此,我按照Android Developer網站上的教程 使用UI Automator設置測試 。 我遇到的第一個問題是 com.android.support:support-v4:22.2.0com.android.support.test:runner:0.2 依賴於 com.android.support:support-annotations 不同版本。 我遵循了 這個Android錯誤報告中 的建議,並將以下內容添加到了我項目的 build.gradle 中的所有項目中:

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

在build.gradle文件中添加此依賴項:

 androidTestImplementation 'androidx.test.ext:junit:1.1.1' 

使用最新版本更新最終版本( 1.1.1 )。


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

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

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


如果您使用的項目具有多個構建類型,則必須在模塊的build.gradle文件中的testBuildType標記中提及在構建變量窗口中選擇的構建類型。

例如:如果使用的是build type debug ,則應添加 android{testBuildType "debug" } ;如果使用 stage ,則應在android標籤中添加 android{testBuildType "stage"} 語句。


如答案列表所示,這可能是由一些原因引起的。 該列表還有一個:

我跑得太熱心了,它刪除了所有未使用的進口商品。 這將產生相同的錯誤,並且很容易錯過這是問題所在。

Android-studio會突出顯示測試代碼中缺少的引用-並會出現ALT-ENTER彈出窗口(這很容易遺漏)。

接下來,我需要從LINT中刪除測試-或至少禁用此警告。

編輯:@ Code-Apprentice,缺少的行是:

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


import static junit.framework.Assert.assertNotNull;
import static junit.framework.Assert.assertNull;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;

因此,文件中的第一個錯誤是在測試類的開頭出現了 @RunWith(AndroidJUnit4.class)


將測試類移至src / androidTest / java /。 然後,依賴關係將解決。


就我而言,這有助於發行版本:

android {
    ...
    testBuildType "release" 
}

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

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

或當時最新的版本(不建議使用 ...Compile ,而已由 ...Implementation 代替)。 注意 使用 debugImplementation 。 Android Studio建議使用 androidTestImplementation 自動將其包括在內,但該方法無效。

通過在app模塊的Dependencies下查看Project Structure,我發現瞭如何將其從測試更改為調試,您可以在其中更改每個依賴項的範圍,請參見下文。


新增中

compile com.android.support.test:runner:0.5'

為我解決了這個確切的問題。


經典的 Invalidate Caches / Restart 幫助了我! :)


請注意,此OP現已發佈於2019年,已經有4年的歷史,因此如果您使用的是Android X, AndroidJUnit4.class 推薦使用 AndroidJUnit4.class ,則在那裡出現錯誤,並且此 androidx.test.ext.junit.runners.AndroidJUnit4 還有一個錯誤。 我建議閱讀此鏈接以解決問題。

不推薦使用AndroidJUnit4.class:如何使用androidx.test.ext.junit.runners.AndroidJUnit4?

將Junit4測試遷移到androidx:是什麼原因導致“無法加載委託人”? 對我來說,Android Studio建議替換

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'
})

已棄用

@RunWith(AndroidJUnit4.class)

和這個

@RunWith(AndroidJUnit4ClassRunner.class)

有了這個

androidx.test.ext.junit.runners.AndroidJUnit4

之後,錯誤消失了,但我不知道將來運行時是否進行測試?





testing-support-library