2016-01-08 7 views
4

Я использую spoon-gradle-plugin от Roman Mazur. Я могу одновременно запускать все тесты, но мне трудно указать «группу» тестов, которые я хотел бы запустить. В настоящее время моя установка ложка выглядит следующим образом:Выполнение контрольно-измерительных тестов с конкретной упаковки через плагин с ложкой-градиентом

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

Мои тесты расположены в пакетах:

enter image description here

И моя цель состоит в том, чтобы создать отдельные Gradle задачи, которые в зависимости от ложки для запуска тестов из каждого пакет отдельно. Роман дал нам параметр instrumentationArgs, который должен быть способен редактировать некоторые свойства внутри ложки.

Как я могу видеть на main git of spoon там написано, что вы можете указать пакет, где ложечки бегун должен искать ваши тесты и пример выглядит, что:

--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 красиво простирающийся ложка по умолчанию конфигурации, предотвращая гифы от создания. Так 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 

Нет Mather, что мне делать с имуществом «пакет», я всегда получаю результат:

-e package com.myapp.instrumentation.flowtests 

И я хочу изменить его, но не знаю как. Более того, я могу сказать, что я попытался найти в строке проекта «com.myapp.instrumentation.flowtests» строку и единственные места, где она используется: тесты в пакетах + задачи градации, представленные выше. Так что он нигде не закодирован. То же место определенно, если я начну тесты по:

./gradlew spoon 

И после того, как я использую:

./gradlew spoonAuthFlowTests 

Он также работает целый набор тестов.

ответ

4

Ваша проблема в том, что вы неправильно интерпретируете, как блок spoon работает в вашей конфигурации Gradle. Когда вы пишете что-то вроде

spoon { 
    debug = true 
} 

Вы в основном изменить одноплодной объект, связанный с проектом Gradle. Этот проект содержит конфигурацию, общую для всех задач, созданных плагином-ложкой. Spoon plugin создает отдельные задачи для разных вкусов, определенных в вашем проекте (чтобы вы могли запускать тесты для каждого аромата отдельно). Также есть задачи, такие как spoonSmall, spoonMedium для запуска тестов, аннотированных только @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 sources. Большинство из них устанавливаются из этого единственного объекта конфигурации by the plugin, когда он создает свои задачи.

Если это звучит слишком сложно, вы можете выбрать другой способ. Настройте свои аргументы, используя свойства проекта, которые можно определить в командной строке.

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

Теперь вы можете запустить

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

Так вместо того, чтобы указать различные задачи в командной строке будет указать различные свойства проекта.

Недостатком является то, что вы не сможете запускать тесты для 2 пакетов с одним вызовом градации. Вам придется называть это дважды с разными значениями.