簡體   English   中英

通過spoon-gradle插件從特定包中運行檢測

[英]Running instrumentation tests from specific package via spoon-gradle plugin

我正在使用Roman Mazur的spoon-gradle-plugin 我能夠立即運行所有測試,但是我無法指定我想要啟動的“組”測試。 目前我的勺子設置看起來像這樣:

spoon {
    debug = true

    baseOutputDir = file("$buildDir/spoon-log")
    if (project.hasProperty('spoonClassName')) {
        className = project.spoonClassName

        if (project.hasProperty('spoonMethodName')) {
            methodName = project.spoonMethodName
        }
    }

    adbTimeout = 60 * 60;
}

我的測試位於包中:

在此輸入圖像描述

我的目標是創建單獨的gradle任務,這些任務依賴於勺子來分別從每個包中啟動測試。 Roman給了我們參數instrumentationArgs ,它應該能夠編輯勺子中的一些屬性。

正如我在勺子的主要git上看到的那樣,你可以指出你可以指定包裝,其中勺子運動員應該尋找你的測試,例子是這樣的:

--e package=com.mypackage.unit_tests

所以我的想法是將此屬性放入instrumentationArgs。 因此我創建了我的勺子任務:

task spoonAuthFlowTests(type: GradleBuild, dependsOn: ['spoon']) {
    spoon {
        instrumentationArgs = ["package=com.myapp.instrumentation.flowtests.AuthFlowTests"]
        noAnimations = true;
    }
}

task spoonFlowTests(type: GradleBuild, dependsOn: ['spoon']) {
    spoon {
        instrumentationArgs = ["package=com.myapp.instrumentation.flowtests"]
        noAnimations = true;
    }
}

我能說的是noAnimations參數很好地擴展了默認的勺子配置,阻止了gif的創建。 所以instrumentationArgs肯定會接受我的字符串數組,但不會應用更改,因為在我的終端中:

2016-01-08 15:13:10 [SDR.run] About to actually run tests for [04ffe19ad317d2e7]
03:13:10 I/RemoteAndroidTest: Running am instrument -w -r   -e package com.myapp.instrumentation.flowtests -e class com.myapp.instrumentation.flowtests.AuthFlowTests.LoginUserFlowTests com.myapp.debug1.test/com.myapp.instrumentation.helper.runner.MyAppTestRunner on lge-nexus_4-04ffe19ad317d2e7

不管我對“包”屬性做什么,我總是收到結果:

-e package com.myapp.instrumentation.flowtests

我想改變它,但不知道如何改變它。 此外,我可以說我試圖查找我的項目“com.myapp.instrumentation.flowtests”字符串,並且使用它的唯一位置是:上面提供的包+ gradle任務中的測試。 所以它在任何地方都沒有硬編碼。 如果我開始測試,則選擇相同的位置:

./gradlew spoon

我使用后:

./gradlew spoonAuthFlowTests

它還運行整個測試集。

您的問題是您錯誤地解釋了在Gradle配置中spoon塊的工作方式。 當你寫的東西像

spoon {
  debug = true
}

您基本上修改與Gradle項目關聯的單個對象。 該項目包含在spoon插件創建的所有任務之間共享的配置。 Spoon插件為項目中定義的不同風格創建單獨的任務(這樣您就可以分別為每種風格運行測試)。 還有像spoonSmallspoonMedium這樣的任務來運行用@Small@Medium注釋的測試。 所有這些任務都使用您使用spoon {}更改的相同配置對象。

因此,當您在任務定義中調用spoon {} ,您只需覆蓋現有值。 並應用最后的值。

如果你想創建一個自定義勺子運行任務,你應該寫類似的東西

import com.stanfy.spoon.gradle.SpoonRunTask
task spoonAuthFlowTests(type: SpoonRunTask) {
  instrumentationArgs = ['package=com.myapp.instrumentation.flowtests.AuthFlowTests']
  // But you will have to set many other options on the tasks,
  // like instrumentationApk and applicationApk files.
}

您可以在SpoonRunTask源中查看所有任務屬性。 它們中的大多數是在插件創建任務時由該單個配置對象設置的。

如果這聽起來太復雜,你可以選擇不同的方式。 使用可在命令行中定義的項目屬性配置參數。

spoon {
  instrumentationArgs = ["package=${project.getProperty('spoonPackage')}"]
  noAnimations = true;
}

現在你可以跑了

./gradlew spoon -PspoonPackage=com.myapp.instrumentation.flowtests

因此,您不必在命令行中指定不同的任務,而是指定不同的項目屬性。

缺點是您將無法使用一個gradle調用運行2個包的測試。 您將不得不使用不同的值調用它兩次。

暫無
暫無

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

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