gpt4 book ai didi

Android Gradle 应用程序 :connectedCheck runs tests from dependencies

转载 作者:可可西里 更新时间:2023-11-01 19:06:47 24 4
gpt4 key购买 nike

我有一些图书馆项目有自己的测试。我不负责这个库项目,也不关心它的测试,但是,当我运行 gradle :app:connectedCheck 时,它会运行我的测试,但它也会运行依赖项的测试。有什么办法可以防止这种情况发生吗?

我应该提一下,我的依赖项不在我所说的 app 模块中。

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

EDIT2:我也尝试过使用 Spoon。我现在已经设置好并且可以运行单独的类,但我想在一个包中运行所有内容。这可能吗?

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

root
-some_library_project
-main_project
-settings.gradle

main_project build.gradle 看起来像这样。我应该提到勺子目前什么都不做,但我的选择是开放的:

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

最佳答案

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

运行

注释掉 androidTest.setRoot 除主包之外的任何其他build.gradle

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

android标签下

sourceSets {  //this one may not be needed. But wont hurt.
androidTest.setRoot('src/androidTest')
}

修改spoon标签:

 spoon {
debug = true
testSizes = ['small', 'medium', 'large'] <<--- Change this to run specific test sizes
if (project.hasProperty('spoonClassName')){
className = project.spoonClassName
}
}

运行

所有测试:

gradle spoon

具体测试类

gradle spoon -PspoonClassName=[THE.PACKAGE.NAME]


编辑

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

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

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

 #!/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 到脚本
  2. 输入chmod u+x runAllTest.sh

那么,这是做什么的:

  1. 首先,它创建一个 timestamp.out。我使用它是为了可以将我的结果一遍又一遍地保存到一个文件中,而不会覆盖以前的结果。你不需要这部分。

  2. 接下来,它会在您的项目根目录中创建一个结果文件夹(如果该文件夹尚不存在)。

  3. 然后,它会在结果文件夹中创建一个名为 Results-SOME-DATE 的文件夹。

  4. 最后,将运行每个测试,将结果保存到项目的正常位置。 (在 build/spoon 中)一旦测试完成,它会将结果复制到结果文件夹,并适本地命名每个测试结果,以便很容易看到所有运行的测试。

注意:此脚本是为 MAC 编写的。如果您在 Windows 或其他任何系统上,此脚本可能需要修改。


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

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 编写的。您可能需要根据您的操作系统进行修改。但是结构应该是一样的

希望对您有所帮助。

关于Android Gradle 应用程序 :connectedCheck runs tests from dependencies,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24704813/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com