Android Gradle app:connectedCheck runs tests from dependencies

后端 未结 2 1519
悲&欢浪女
悲&欢浪女 2021-01-11 09:03

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

相关标签:
2条回答
  • 2021-01-11 09:47

    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:

    1. like Krylez mentioned it in his comment you may just skip the specific test task with ./gradlew connectedAndroidTest -x :mylib:connectedAndroidTest
    2. you filter your tests in the test closure like it is explained here: http://www.gradle.org/docs/current/userguide/java_plugin.html#sec:java_test
    0 讨论(0)
  • 2021-01-11 09:49

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

    To run

    All tests:

    gradle spoon

    Specific Test Class

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


    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:

     #!/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

    1. cd to the script
    2. type chmod u+x runAllTest.sh

    So, what this does:

    1. 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.

    2. Next, it creates a result folder in the root of your project if it is not already there.

    3. Then, it will make a folder inside the results folder named Results-SOME-DATE.

    4. 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.

    0 讨论(0)
提交回复
热议问题