[英]Android Gradle app:connectedCheck runs tests from dependencies
我有一些库项目有自己的测试。 我不负责这个库项目并且不关心它的测试,但是,当我运行gradle :app:connectedCheck
它运行我的测试,但它也运行依赖项的测试。 有什么办法可以阻止这个吗?
我应该提一下,我的依赖项不在我所说的app
模块中。
编辑:更具体地说,我依赖的图书馆项目有非常长的测试,因为他们打算在凌晨2点在构建服务器上运行,所以我坐在这里等待油漆干燥只是为了让我真的很短试验。
EDIT2:我也尝试过使用Spoon。 我现在已经安装它并可以运行单个类,但我想在一个包中运行所有内容。 那可能吗?
编辑3:文件夹结构是无关紧要的,但这是一个非常非常详细的外观:
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 :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勺子
特定测试类
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步:授予脚本权限
cd
到脚本 chmod u+x runAllTest.sh
那么,这是做什么的:
首先,它创建一个timestamp.out。 我使用这个,所以我可以反复将结果保存到文件中,而不会覆盖之前的结果。 你不需要这个部分。
接下来,它会在项目的根目录中创建一个结果文件夹(如果它尚不存在)。
然后,它将在结果文件夹中创建一个名为Results-SOME-DATE的文件夹。
最后,每个测试都会运行,将结果保存到项目的正常位置。 (内部构建/勺子)一旦测试完成,它将结果复制到结果文件夹,并适当地命名每个测试结果,以便很容易看到所有测试都运行。
注意:此脚本是为MAC编写的。 如果你的窗口或其他任何东西,这个脚本可能需要修改。
另外:您会发现打开每个文件夹以打开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写的。 您可能需要根据您的操作系统进行修改。 但结构应该是一样的
我希望这有帮助。
如果你有一个项目依赖于这个库,gradle想要构建和测试它,因为两者都是java项目的常规构建过程。 要避免这些测试,您可以执行以下操作之一:
./gradlew connectedAndroidTest -x :mylib:connectedAndroidTest
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.