- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我有一些图书馆项目有自己的测试。我不负责这个库项目,也不关心它的测试,但是,当我运行 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 步: 授予脚本权限
cd
到脚本chmod u+x runAllTest.sh
那么,这是做什么的:
首先,它创建一个 timestamp.out。我使用它是为了可以将我的结果一遍又一遍地保存到一个文件中,而不会覆盖以前的结果。你不需要这部分。
接下来,它会在您的项目根目录中创建一个结果文件夹(如果该文件夹尚不存在)。
然后,它会在结果文件夹中创建一个名为 Results-SOME-DATE 的文件夹。
最后,将运行每个测试,将结果保存到项目的正常位置。 (在 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/
$ ./gradlew clean build connectedCheck 产量 Unable to find instrumentation target package: my.package
我正在使用 jenkins+gradle 构建我的 android 应用程序。我运行命令 gradle clean connectedCheck build 当我在 jenkins 设置“显示模拟器窗
用过:github,gradle,travis CI来构建我的Android项目。 一些问题: ...... 表明它不是内部类。 :processReleaseJavaRes截止日期 :validat
问题是 Jacoco 在启用测试覆盖率的情况下执行 ./gradlew connectedCheck 后报告 Realm 生成的类。 Realm 生成大量代码,这使得覆盖率报告不可靠。 这就是测试覆盖
当我运行以下命令时,我得到了 connectedCheck 的描述,但我仍然不确定它的用途。谁能给我一个真实世界的例子? ./gradlew tasks prints ... Verification
我使用的是 Android Studio 1.2.2 和 Gradle 插件 1.2.3。 我试图在不运行 gradlew connectedCheck 的情况下生成代码覆盖率报告,只是 gradle
我有一个设置了多个模块依赖项的 Android Studio + Gradle 项目。我正在尝试将每个模块的单元测试报告合并在一起(请参阅 http://tools.android.com/tech-
我有一些图书馆项目有自己的测试。我不负责这个库项目,也不关心它的测试,但是,当我运行 gradle :app:connectedCheck 时,它会运行我的测试,但它也会运行依赖项的测试。有什么办法可
我正在尝试运行 Espresso测试 Android 应用程序。它在硬件设备上运行良好。当我在新创建的 AVD 模拟器 上运行它时,它失败,如下所示: :ExampleApp:connectedDeb
当我运行基于 android 模拟器的测试时: gradlew check connectedCheck ...它失败了: com.android.dx.util.DexException: Mul
我有一个具有以下文件结构的 android 库。 Android_Library ├── libs └── src ├── instrumentTest │ ├── assets
在 Android gradle 插件中有 aapt 和 dex 的选项,但我找不到在哪里可以将参数传递给任务使用的 adb,例如 install 和 connectedCheck(以及任何其他将使用
AndroidStudio 更新后,我将 wrapper 中的 gradle 更新为 1.9,并在 build.gradle 的依赖项中更新为 0.7.+。 从那以后,我在运行 ./gradlew c
我是一名优秀的程序员,十分优秀!