首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android应用程序:connectedCheck从依赖项运行测试

Android应用程序:connectedCheck从依赖项运行测试
EN

Stack Overflow用户
提问于 2014-07-11 19:08:01
回答 2查看 6.4K关注 0票数 15

我有一些库项目有自己的测试。我不负责这个库项目,也不关心它的测试,但是,当我运行gradle :app:connectedCheck时,它运行我的测试,但它也运行依赖项的测试。有什么办法可以阻止这件事吗?

我应该指出,我的依赖项不在我提到的app模块中。

编辑:更具体地说,我所依赖的库项目有非常长的测试,因为它们应该在凌晨2点在构建服务器上运行,所以我坐在这里等待油漆擦干,只为了运行我非常短的测试。

EDIT2:我也试过用勺子。我现在已经安装好了,可以运行单独的类,但是我想在一个包中运行所有的东西。这有可能吗?

EDIT3:文件夹结构是不重要的,但是这里有一个非常不详细的外观:

代码语言:javascript
复制
root
-some_library_project
-main_project
-settings.gradle

main_project build.gradle看起来是这样的。我要指出的是,汤匙目前什么也不做,但我的选择是开放的:

代码语言:javascript
复制
buildscript{
 repositories {
     jcenter()
 }
 dependencies{
     classpath 'com.stanfy.spoon:spoon-gradle-plugin:0.10.+'
 }
}

apply plugin: 'com.android.application'
apply plugin: 'spoon'

android {
    compileSdkVersion 20
    buildToolsVersion '20.0.0'

 defaultConfig {
    applicationId "com.something.main_project"
    minSdkVersion 17
    targetSdkVersion 20
    versionCode 1
    versionName "1.0"

    testPackageName "com.something.main_project.test"
    testInstrumentationRunner "android.test.InstrumentationTestRunner"

 }

 signingConfigs {
    debug {
        storeFile file("debug.keystore")
    }

    release {
        storeFile file("release.keystore")
        storePassword "something"
        keyAlias "something"
        keyPassword "something"
    }
 }

 buildTypes {
    release {
        runProguard false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        signingConfig signingConfigs.release
    }
    debug{
        signingConfig signingConfigs.debug
    }
 }

}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])

    compile project(':some_library_project')

    androidTestCompile 'com.squareup.spoon:spoon-client:1.1.0'
}

spoon {
    if (project.hasProperty('spoonClassName')){
        className = project.spoonClassName
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-07-21 21:13:10

您有Spoon插件,但正在运行gradle :app:connectedCheck。首先,进行这些更改,然后使用gradle spoon运行

注释除 androidTest.setRoot 以外的其他build.gradle,即主包

build.gradle 将这些添加到主包:

标签下android

代码语言:javascript
复制
sourceSets {  //this one may not be needed. But wont hurt.
    androidTest.setRoot('src/androidTest')
}

修改spoon标签:

代码语言:javascript
复制
 spoon {
     debug = true
     testSizes = ['small', 'medium', 'large']   <<--- Change this to run specific test sizes
     if (project.hasProperty('spoonClassName')){
        className = project.spoonClassName
     }
  }

所有测试:

分级匙

特殊测试类

格拉德尔汤匙-PspoonClassName=THE.PACKAGE.NAME

编辑

在阅读编辑"Edit2“之后,我看到这只会指定要运行的某个类,而不是特定的包。不幸的是,我没有找到解决这一问题的办法,只是一个解决办法.我构建了一个bash脚本,并在其中添加了我的类来测试,如下所示:

步骤1:在Android项目的根目录创建一个文件:runAllTests.sh

步骤2:编辑.sh如下所示:

代码语言:javascript
复制
 #!/bin/sh
 date +%b-%dT%H.%M > timestamp.out

 sites="$HOME"/path/to/project/root

 timestamp="$(cat "$sites"/timestamp.out)"
 result_folder="$sites"/results
 destdir="$result_folder/Results-$timestamp"

 mkdir -p "$destdir"
 echo "Directory created: ${destdir##*/}"

  <---------- Here you start running the test --------------->

  echo "Starting Master Setup"
  gradle spoon -PspoonClassName=com.espresso.test.MasterSetup
  cp -r "$sites"/app/build/spoon "$destdir"/MasterSetup
  echo "Results saved to MasterSetup"

  echo "Starting WorkoutSchedule"
  gradle spoon -PspoonClassName=com.espresso.test.CupcakeSchedule
  cp -f "$sites"/app/build/spoon "$destdir"/WorkoutSchedule
  echo "Results saved to WorkoutSchedule"

  echo "Starting Setting.test"
  gradle spoon -PspoonClassName=com.espresso.test.Settings
  cp -r "$sites"/app/build/spoon "$destdir"/Settings
  echo "Results saved to Settings"

步骤3:给脚本权限

  1. 脚本的cd

  1. chmod u+x runAllTest.sh

所以,这是做什么的:

  1. 首先,它创建一个timestamp.out。我使用它,这样我就可以一次又一次地将我的结果保存到一个文件中,而不会覆盖以前的结果。你不需要这部分。
  2. 接下来,它在项目的根目录中创建一个结果文件夹,如果它还不存在的话。
  3. 然后,它将使一个文件夹内的结果文件夹名为结果-一些日期.
  4. 最后,每个测试都将运行,将结果保存到项目的正常位置。(内部构建/调羹)一旦测试完成,它将将结果复制到结果文件夹中,并将每个测试结果命名为适当的名称,以便很容易看到所有测试都在运行。

注意:这个脚本是为MAC编写的。如果您在窗口或其他任何地方,此脚本可能需要修改。

Additionally:您会发现打开每个文件夹来打开index.html是不方便的。所以我编写了这个脚本来添加到您的bash_profile

代码语言:javascript
复制
function open-results () {
# the browser to open up `index.html' in.
browser='/Applications/Google Chrome.app/Contents/MacOS/Google Chrome'

# let the user know what directory we're looking in
printf "looking in %s" "$(pwd)"
echo ...

for paths in $(find ./ -name 'debug' -type d); do
  for files in $(find "$paths" -name 'index.html'); do
    open -a "$browser" "$files"
  done
done
echo done
}

现在,cd转到Results-SOME-DATE,并键入open-results。,这是为bash编写的。您可能需要修改取决于您的操作系统。但结构应该是一样的

我希望这能帮到你。

票数 5
EN

Stack Overflow用户

发布于 2014-07-16 14:14:13

如果您对这个库有项目依赖性,gradle想要构建和测试它,因为这两者都是java项目的通常构建过程。为了避免这些测试,您可以执行以下操作之一:

  1. 正如Krylez在他的评论中提到的那样,您可以跳过./gradlew connectedAndroidTest -x :mylib:connectedAndroidTest的特定测试任务。
  2. 在测试闭包中过滤测试,就像下面解释的那样:test
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24704813

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档