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:conn
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 with gradle spoon
Comment out androidTest.setRoot
any other build.gradle other that the main package
Add these to build.gradle
of the main package:
Under tag android
sourceSets { //this one may not be needed. But wont hurt.
androidTest.setRoot('src/androidTest')
}
Modify spoon
tag:
spoon {
debug = true
testSizes = ['small', 'medium', 'large'] <<--- Change this to run specific test sizes
if (project.hasProperty('spoonClassName')){
className = project.spoonClassName
}
}
All tests:
gradle spoon
Specific Test Class
gradle spoon -PspoonClassName=[THE.PACKAGE.NAME]
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:
#!/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"
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 your 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
}
Now, cd to the Results-SOME-DATE
, and type open-results
. Again, this was written for bash. You may need to modify depending on your OS. But the structure should be the same
I hope this helps.