I have some library project that has its own tests. I'm not responsible for this library project and don't care about its tests, however, when I run gradle :app:connectedCheck
it runs my tests but it also runs the dependencies' tests. Is there any way I can prevent this?
I should mention that my dependencies are not within the app
module I speak of.
EDIT: More specifically, the library project I'm depending on has extremely long tests as they are meant to run on a build server at 2 in the morning, so I'm sitting here waiting for paint to dry just to run my really short tests.
EDIT2: I've also tried using Spoon. I have it setup right now and can run individual classes, but I'd like to run everything in one package. Is that possible?
EDIT3: The folder structure is insignificant but here's a very very non-detailed look:
root
-some_library_project
-main_project
-settings.gradle
The main_project build.gradle looks like this. I should mention that spoon is currently doing nothing, but my options are open:
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
}
}
If you have a project dependency to this library, gradle wants to build and test it, since both is the usual build process of a java project. To avoid these test you can do one of this:
./gradlew connectedAndroidTest -x :mylib:connectedAndroidTest
You have the Spoon plugin, but are running with
gradle :app:connectedCheck
. First, make these changes, then run withgradle spoon
Comment out
androidTest.setRoot
any other build.gradle other that the main packageAdd these to
build.gradle
of the main package:Under tag
android
Modify
spoon
tag:To run
All tests:
Specific Test Class
Edit
After reading your edit "Edit2", I see that this will only specify a certain class to run, and not a specific package. Unfortunately, I have not found a solution to this, only a work-around. I built a bash script and in it I added my classes to test, like so:
Step 1: Create a file at the root of your Android project:
runAllTests.sh
Step 2: Edit
.sh
to look like this:Step 3: Give the script permissions
cd
to the scriptchmod u+x runAllTest.sh
So, what this does:
First, it creates a timestamp.out. I use this so I can save my results to a file over and over without previous results being overwritten. You do not need this part.
Next, it creates a result folder in the root of your project if it is not already there.
Then, it will make a folder inside the results folder named Results-SOME-DATE.
Lastly, each test will run, saving the results to the normal spot on your project. (Inside build/spoon) Once test are complete it will copy the results to the results folder, and name each test result appropriately so it is easy to see all your tests ran.
NOTE: This script was written for MAC. If your on windows or anything else, this script may need modifications.
Additionally: You will find it is inconvenient to open in to each folder to get the
index.html
opened. So I wrote this script to add to yourbash_profile
:Now, cd to the
Results-SOME-DATE
, and typeopen-results
. Again, this was written for bash. You may need to modify depending on your OS. But the structure should be the sameI hope this helps.