4

私は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;
}

私のテストはパッケージにあります:

ここに画像の説明を入力

そして、私の目標は、spoon に依存する個別の 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

また、テスト セット全体を実行します。

4

1 に答える 1

5

問題はspoon、Gradle 構成でブロックがどのように機能するかを誤って解釈していることです。みたいなことを書くと

spoon {
  debug = true
}

基本的に、Gradle プロジェクトに関連付けられたシングルトン オブジェクトを変更します。このプロジェクトには、spoon プラグインによって作成されたすべてのタスク間で共有される構成が含まれています。Spoon プラグインは、プロジェクトで定義されたさまざまなフレーバーに対して個別のタスクを作成します (各フレーバーのテストを個別に実行できるようにするため)。またはのみで注釈を付けたテストを実行するなどspoonSmallのタスクもあります。これらのタスクはすべて、 で変更した同じ構成オブジェクトを使用します。spoonMedium@Small@Mediumspoon {}

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 sourcesですべてのタスク プロパティを確認できます。それらの大部分は、プラグインがタスクを作成するときに、その単一の構成オブジェクトから設定されます。

これが複雑すぎると思われる場合は、別の方法を選択できます。コマンド ラインで定義できるプロジェクト プロパティを使用して、引数を構成します。

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

これで実行できます

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

したがって、コマンド ラインでさまざまなタスクを指定する代わりに、さまざまなプロジェクト プロパティを指定します。

欠点は、1 回の gradle 呼び出しで 2 つのパッケージのテストを実行できないことです。異なる値で 2 回呼び出す必要があります。

于 2016-01-21T07:47:28.303 に答える