| name | test |
| description | Run unit tests and instrumentation tests for Canvas Android apps. Use when user mentions testing, running tests, JUnit, Espresso, or checking test results. Includes commands for Student, Teacher, and Parent apps. |
| allowed-tools | Bash, Read |
Test Canvas Android Apps
Run unit tests, instrumentation tests, and Espresso tests for Canvas Android apps.
Test Location
All test commands must be run from the repository root (canvas-android/), not the apps/ directory.
Unit Tests
Unit tests verify business logic in isolation using Mockk for mocking.
Prerequisites
- Set Build Variant to
qaDebug in Android Studio, or
- Use command line with
testQaDebugUnitTest as shown below
Run Unit Tests for Apps
./gradle/gradlew -p apps :student:testQaDebugUnitTest
./gradle/gradlew -p apps :teacher:testQaDebugUnitTest
./gradle/gradlew -p apps :parent:testQaDebugUnitTest
Run Unit Tests for Shared Libraries
./gradle/gradlew -p apps :pandautils:testDebugUnitTest
./gradle/gradlew -p apps :pandautils:testDebugUnitTest --tests "com.instructure.pandautils.features.discussion.router.*"
./gradle/gradlew -p apps :pandautils:testDebugUnitTest --rerun-tasks
Run Specific Unit Tests
Use the --tests flag to run specific test classes or methods:
./gradle/gradlew -p apps :student:testQaDebugUnitTest --tests "com.instructure.student.features.dashboard.DashboardViewModelTest"
./gradle/gradlew -p apps :student:testQaDebugUnitTest --tests "com.instructure.student.features.dashboard.widget.*"
Test Structure
- Unit tests:
src/test/java/com/instructure/{app}/features/{feature}/
- Instrumentation tests:
src/androidTest/java/com/instructure/{app}/ui/{feature}/
Instrumentation/Espresso Tests
Instrumentation tests run on a device or emulator to test UI interactions.
Prerequisites
Before running UI tests, check for connected devices:
adb devices -l
If multiple devices are connected:
- Prefer running on an emulator if available
- Use
ANDROID_SERIAL environment variable or -s flag to specify a device
Run All Instrumentation Tests
./gradle/gradlew -p apps :student:connectedQaDebugAndroidTest
./gradle/gradlew -p apps :teacher:connectedQaDebugAndroidTest
Run Specific Instrumentation Test
./gradle/gradlew -p apps :student:connectedQaDebugAndroidTest -Pandroid.testInstrumentationRunnerArguments.class=com.instructure.student.ui.dashboard.DashboardPageTest
Target Specific Device
If multiple devices are connected:
ANDROID_SERIAL=emulator-5554 ./gradle/gradlew -p apps :student:connectedQaDebugAndroidTest
adb -s emulator-5554 shell ...
Testing Patterns
- Write unit tests in the same style as existing tests (check
student/src/test/)
- Write instrumentation tests following existing patterns (check
student/src/androidTest/)
- Mock dependencies with Mockk
- Use test doubles for repositories in ViewModel tests
- Espresso tests should use page object pattern from
:espresso module
- Ensure tests are isolated and repeatable
Examples
Run all widget tests:
./gradle/gradlew -p apps :student:testQaDebugUnitTest --tests "com.instructure.student.features.dashboard.widget.*"
Run tests and view report:
./gradle/gradlew -p apps :student:testQaDebugUnitTest
open apps/student/build/reports/tests/testQaDebugUnitTest/index.html