簡體   English   中英

單元測試不適用於 Android Studio Arctic Fox

[英]Unit tests not working on Android Studio Arctic Fox

我最近安裝了 Android Studio Arctic Fox v2020.3.1 Beta 2,以便能夠在我們的項目中使用 Jetpack Compose ,因為我無法在 AS 4.2.1 上這樣做,因為Compose拋出了一個奇怪的構建錯誤,該錯誤已得到修復關於北極狐

所以這就是問題所在,在加載項目、更新一些 SDK/庫之后,我能夠構建和運行沒問題,但是,當我去運行單元測試時,我注意到 IDE 不再識別所有測試類。之后一些調查我發現較新版本的 AS 將不再識別 JUnit 配置

正如您在下面的屏幕截圖中看到的那樣,無法像我通常那樣運行這些測試:

在此處輸入圖像描述

在此處輸入圖像描述

這個來自Run/Debug Configurations ,其中JUnit測試在未知類別下:

在此處輸入圖像描述

最后,我確實創建了一個 gradle 配置來測試,但它只是在左側顯示:

未收到測試事件

並在右側拋出錯誤:

任務 'features:signup:testDevDebugUnitTest' 執行失敗。 未找到給定的測試包括:com.projectsaturn.android.features:signup.SignupViewModelTest

我想知道是否有人遇到過這個問題並且能夠解決?

任何幫助表示贊賞!

更新 01:

所以我決定回滾一切,從頭開始。 這次我只更新了一些東西:

  • Gradle : com.android.tools.build.gradle:7.0.0-beta02
  • Kotlin : org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.4.32
  • Crashlyticscom.google.firebase:firebase-crashlytics-gradle:2.6.1
  • 測試(核心、跑步者和規則)androidx.test:core/runner/rules:1.3.0

現在的問題是,當我通過 Gradle 運行它時,所有單元測試都失敗了。我懷疑它在運行實際測試函數之前沒有運行@Before注釋 function。 或者我沒有正確設置 Gradle 測試(下面的屏幕截圖)?

在此處輸入圖像描述

如果您使用的是 Android Studio Arctic Fox,則需要稍微修改您的 app/build.gradle。

添加

android {
    testOptions {
        execution 'ANDROIDX_TEST_ORCHESTRATOR'

        unitTests.all {
            useJUnitPlatform() // <--- this is the important part
        }
    }
}

並確保將 junit-engine 添加到依賴項中

testImplementation 'org.junit.jupiter:junit-jupiter-engine:5.7.1'

對我來說,將 Android Studio 升級到北極狐 2020.3.1 補丁 2 (剛剛發布)是正確的解決方案。

在過去的幾天里,我還在努力修復我所有的 JUnit 測試失敗,將之前版本的 Android Studio 降到 4.0。 這些舊的 Android Studio 版本都不適用於我的 JUnit 測試。 我還嘗試了迄今為止發布的所有答案:它們都不適合我。 今天,我的所有 JUnit 測試都成功了,只需將我的 Android Studio 升級到北極狐 2020.3.1 補丁 2 ,而無需對我的源代碼進行任何更改。 我分享這個消息是為了幫助一些仍然面臨這個問題的人。 我已經在我的 MacBook 上測試了該修復程序。

我嘗試了一些已發布的解決方案,但沒有人為我工作

對我有用的解決方案是使用java 8(1.8 版)而不是 Java 與 ZE84E30B9390CDB64DB6DB2C9AB878416DZ 捆綁在一起的 ZD52387880E1EA213819Z 用於北極工作室(11.0)

腳步

  • File -> Settings -> Build -> gradle -> gradle JDK
  • 選擇download JDK
  • 選擇version 1.8
  • 點擊download
  • 完成后單擊apply並再次run測試

[更新] 如果您的目標是 android 12所以這需要 AGP 7.0+ 這需要 Java 11 解決方案將不適用否則上述解決方案將適合。

這可能不是每個人的解決方案,但我們的項目有許多單元測試由於 Android Studio Arctic Fox 的Gradle 測試運行器而被破壞。 看來,如果您更新到最新的 Gradle 插件,右鍵單擊測試 class 將提示新的 Gradle“創建測試”選項。 創建 Gradle 測試選項 .

我們還沒有更新插件,所以我們的解決方案是為單元測試制作我們自己的 Gradle 運行配置。

這可以通過以下方式完成:

  1. Go 到工具欄 > 運行 > 編輯配置
  2. 然后在 Gradle 下創建一個新配置,其中包含您要運行的測試的任務運行配置 舊的 Android JUnit 測試是 Android Studio 在沒有插件更新的情況下默認運行的。

我嘗試了幾個建議,包括上面列出的那些,但單元測試仍然沒有運行。

從官方網站偶然發現了這篇文章,並意識到似乎開發人員(至少是那些運行測試的人)也必須從文章中暗示的 Canary 或 Dev 頻道下載 Android studio Bumblebee。

在 Android 工作室北極狐(在穩定頻道中可用)中沒有使用 GRADLE 運行 ANDROID 儀器測試的選項。

所以,要在 AS Arctic Fox 中運行測試,

  1. Canary 頻道下載、解壓並運行 Android studio Bumblebee(您可以按照此處所述與穩定的北極狐版本一起安裝)
  2. 在 AS Bumblebee 中,Select File > Settings > Build, Execution, Deployment > Testing(或 Android Studio > Preferences > Build, Execution, Deployment > Testing for mac 用戶)

3.選中使用 Gradle 運行 Android 儀器測試旁邊的框,然后單擊應用然后確定

運行測試,看看它在 Android studio BumbleBee 中運行。

Go 回到 android 工作室北極狐,運行測試,看看它也在這里運行!

沒有任何效果我已經嘗試了以上所有答案唯一有效的方法是將您的 android-studio 版本降級到 4.2.1,然后 JUnit 測試將運行

同樣的問題,我已經替換了這里描述的一些依賴項 https://developer.android.com/training/testing/junit-runner#ato-gradle它對我有用!

對我來說 Gradle 測試顯示Test events were not received而代碼中實際上存在錯誤。

修復方法是在測試之前構建項目並修復錯誤(如果有)。

一種選擇是從命令行調用 gradle 測試。 這也將顯示代碼錯誤

./gradlew :app:cleanTestDebugUnitTest :app:testDebugUnitTest --tests "VehicleRepositoryTest.testVehicle"

要在 Android Studio Arctic Fox 中使用 JUnit 5,請像這樣修改您的 app/build.gradle:

android {

// .... other stuff

testOptions {
    execution 'ANDROIDX_TEST_ORCHESTRATOR'

    unitTests.all {
        useJUnitPlatform() // <--- this is the important part
    }
}

}

然后像這樣將版本添加到 junit 中:

testImplementation 'org.junit.jupiter:junit-jupiter:5.8.2'

在依賴項塊內。

然后從依賴項中刪除 junit 的其他版本(例如 junit 4)。 然后確保您在測試中引用了正確的版本。 這是@Test 注釋和 assertEquals 的示例:

//import static org.junit.Assert.assertEquals;
import static org.junit.jupiter.api.Assertions.*;
import org.junit.jupiter.api.Test;
//import org.junit.Test;

class UtilsTest5 {
   @Test
   public void add() {       
      assertEquals(10, 10);
   }
}

按照這些步驟,對我有用。 您需要為每個 class 或測試創建單獨的任務。 除了在 Android Studio artifox 中,我沒有找到任何運行測試的解決方法。

  1. 將此添加到您的模塊,即應用程序或其他模塊

    testOptions { unitTests.all { useJUnitPlatform() } }

  2. 添加:data:cleanTestDebugUnitTest:data:testDebugUnitTest--tests "com.*" 在此處輸入圖像描述

嘗試 android 工作室金絲雀版本。 我正在使用 bumblebee,所有測試功能的工作方式都與以前相同。 https://developer.android.com/studio/preview

我安裝了 AS BumbleBee(根據此線程中的建議),添加了 JUnit 庫,

testImplementation 'org.junit.jupiter:junit-jupiter:5.8.2'

並刪除了 junit:4.x

我設置了 Gradle 運行配置,但剛剛添加了 Gradle 側邊欄菜單中列出的 Gradle 任務,testDebugUnitTest,no:app: or:verification: 等。

在此處輸入圖像描述

When I select the Run all tests from the Run Configuration dropdown menu, the Gradle task window opens at the bottom of the IDE, all my tests are run and I get a final "18 of 18 tests were run". 我仍然無法像以前那樣從編輯器運行單個測試,但至少這總比沒有好,我的 CI 服務器能夠從命令行執行測試而不會再次失敗,使用:

./gradlew :app:testDebugUnitTest --tests "com.*"

在 MacOS Monterey 12.1 上全新安裝北極狐 2020.3.1 補丁 4 后,我還擁有

未收到測試事件

使用“基本活動”創建新項目后,我無法運行隨項目自動創建的提供的單元測試。

對我來說,解決方案是接受 Android Studio 的所有許可證。 我已關注此線程: 自動接受所有 SDK 許可證

Go 到/Library/Android/sdk/cmdline-tools/latest/bin並運行:

./sdkmanager --licenses

理論上,我希望彈出窗口要求我接受許可證,但我在第一次啟動 Android Studio 時沒有看到任何內容。

按照 Android 文檔中的說明設置您的測試環境構建儀器測試並且可以正常工作。

不要忘記將 AndroidJUnitRunner 添加為默認值。

android {
    defaultConfig {
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }
}

你可以試試:

File -> Settings -> Experimental -> Uncheck "Do not build Gradle task list during Gradle sync"

在那之后:

File -> Sync Project with Gradle Files

注釋掉
testOptions.unitTests { //includeAndroidResources = true }

在北極狐中,播放/運行按鈕仍應在Test類中可見。 對我有用的是更改 AS 的主題(將其更改為Atom OneDark ,但可能與內置主題一起使用)!

這不是一個很好的解決方案,但對我來說,它僅在我使用 JDK 1.8 作為Gradle JDK

要更改Gradle JDK ,請打開Settings > Build, Execution, Deployment > Build Tools > Gradle > Gradle JDK

通過單擊列表並使用Download JDK...可以下載 JDK 1.8。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM