5

SpoonGradlePlugin でテストを実行するために使用される .apk ファイルを設定したいと思います。

gradle ファイルからプログラムで設定できる利用可能なプロパティがあります。

https://github.com/stanfy/spoon-gradle-plugin/blob/master/src/main/groovy/com/stanfy/spoon/gradle/SpoonExtension.groovy

しかし、私のプロジェクトにはさまざまなフレーバーと名前があり、それらをテストしたいと思います。現在のセットアップでは、次のようになります。

* What went wrong:
A problem was found with the configuration of task ':app:spoonDebugAndroidTest'.
> File '/Users/F1sherKK/Dev/MyApp-Android/app/build/outputs/apk/app-debug.apk' specified for property 'applicationApk' does not exist.

私のビルド名は次のとおりです。

app-debug-androidTest-unaligned.apk
MyApp-debugA-1.2.3-201.apk
MyApp-debugB-1.2.3-201.apk
MyApp-debugC-1.2.3-201.apk

.apk を gradle コードまたはコンソールのどこかにセットアップしたいのはそのためです。私がこれまでに見つけたものには、Spoon Gradle Plugin で利用可能なフィールドがあります。

https://github.com/stanfy/spoon-gradle-plugin/blob/master/src/main/groovy/com/stanfy/spoon/gradle/SpoonRunTask.groovy

名前付き:

  /** Instrumentation APK. */
  @InputFile
  File instrumentationApk

  /** Application APK. */
  @InputFile
  File applicationApk

しかし、SpoonExtension.groovy のプロパティのようなグラドルにはアクセスできません。

これらのフィールドを設定する方法はありますか?

//編集 - いくつかの試行を追加しました: これは私の基本スプーン構成です:

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

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

そして、それを拡張し、instumentationArgs を上書きしてパッケージを設定し、他の種類のテストを起動するタスク。

task spoonAllTests(type: GradleBuild, dependsOn: ['spoon']) {
    spoon {
        instrumentationArgs = ["package=com.myapp.sendmoney.instrumentation"]
    }
}

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

そして今、applicationApk または instrumentationApk ファイルを編集しようとしています:

ここに画像の説明を入力

ここに画像の説明を入力

ここに画像の説明を入力

Edit2:私は新しいことを試しました:

task spoonFlowTests(type: GradleBuild, dependsOn: ['spoon']) {
    spoon {
        inputs.property("applicationApk", "$buildDir/outputs/apk/ap12345p-debug.apk")
        inputs.property("instrumentationApk", "$buildDir/outputs/apk/ap125p-debug.apk")
        println inputs.getFiles()
        println inputs.getProperties()
        instrumentationArgs = ["package=com.azimo.sendmoney.instrumentation.flowtests"]
    }
}

そして端末応答:

2015-10-26 20:24:12 [SR.runTests] Executing instrumentation suite on 0 device(s).
2015-10-26 20:24:12 [SR.runTests] Application: com.azimo.sendmoney.debug1 from /Users/F1sherKK/Dev/Azimo-Android/app/build/outputs/apk/app-debug.apk
2015-10-26 20:24:12 [SR.runTests] Instrumentation: com.azimo.sendmoney.debug1.test from /Users/F1sherKK/Dev/Azimo-Android/app/build/outputs/apk/app-debug-androidTest-unaligned.apk
:app:spoon
:app:spoonFlowTests
file collection
{instrumentationApk=/Users/F1sherKK/Dev/Azimo-Android/app/build/outputs/apk/ap125p-debug.apk, applicationApk=/Users/F1sherKK/Dev/Azimo-Android/app/build/outputs/apk/ap12345p-debug.apk}
:Azimo-Android:app:help

Welcome to Gradle 2.5.

To run a build, run gradlew <task> ...

To see a list of available tasks, run gradlew tasks

To see a list of command-line options, run gradlew --help

To see more detail about a task, run gradlew help --task <task>

BUILD SUCCESSFUL

Total time: 13.289 secs
4

4 に答える 4

4

次のように apk 名を変更した後、Spoon プラグインを適用できます。

applicationVariants.all { variant ->
        variant.outputs.each { output ->
            output.outputFile = new File(
                    output.outputFile.parent,
                    output.outputFile.name.replace(".apk", "-${variant.versionName}.apk"))
        }
    }
afterEvaluate {
        apply plugin: 'spoon'
        spoon {
            debug = true;
        }
    }

ソース: https://github.com/stanfy/spoon-gradle-plugin/issues/70

于 2015-11-02T19:05:13.557 に答える
0

パラメータの注釈を考慮する必要があります。

  /** Instrumentation APK. */
  @InputFile
  File instrumentationApk

  /** Application APK. */
  @InputFile
  File applicationApk

これらは としてマークされているため、 input.filesプロパティ@InputFileを使用して入力を渡す Spoon タスクに依存するカスタム タスクを作成できるはずです。

大まかな例 (未テスト):

task customSpoon(type: Exec, dependsOn: spoon) {
     inputs.files ["path/instrumentation.apk", "path/debuggable.apk"]
}  

アップデート

別の方法として、次のように、基本 Spoon タスクへのコマンドライン パラメータ化呼び出しをシミュレートするカスタム タスクを作成するだけです。

task runSpoonTask(type: Exec) {
    commandLine './gradlew', 'spoon', '$buildDir/outputs/apk/ap12345p-debug.apk', '$buildDir/outputs/apk/ap125p-debug.apk'
}
于 2015-10-22T17:31:27.547 に答える