Files
Meshtastic-Android/docs/en/developer/testing.md

2.5 KiB

title, parent, nav_order, last_updated, aliases
title parent nav_order last_updated aliases
Testing Developer Guide 7 2026-05-13
tests
unit-tests
screenshot-tests

Testing

Testing strategy and practices for the Meshtastic KMP project.

Test Categories

KMP Unit Tests (commonTest)

Shared tests that run on all platforms:

./gradlew allTests
  • Business logic tests
  • Data model validation
  • Search/ranking algorithm tests
  • Route serialization tests

Android Host Tests

Android-specific tests that run on JVM:

./gradlew test
  • ViewModel tests
  • Repository tests with Room fakes
  • Android-specific integration tests

Compose UI Tests

Compose Multiplatform UI test framework:

@Test
fun myScreenTest() = runComposeUiTest {
    setContent { MyScreen() }
    onNodeWithText("Expected").assertIsDisplayed()
}

Located in commonTest or jvmTest source sets.

Screenshot Tests

Uses Android Gradle Plugin's native screenshot testing framework:

./gradlew :screenshot-tests:updateDebugScreenshotTest    # Record golden images
./gradlew :screenshot-tests:validateDebugScreenshotTest  # Compare against goldens
./gradlew :screenshot-tests:copyDocsScreenshots          # Copy reference images to docs pipeline

Test Organization

feature/my-feature/src/
├── commonTest/kotlin/org/meshtastic/feature/myfeature/
│   ├── MyBusinessLogicTest.kt
│   └── MyModelTest.kt
└── jvmTest/kotlin/org/meshtastic/feature/myfeature/
    └── MyDesktopSpecificTest.kt

Testing Guidelines

DO

  • Write tests in commonTest when possible (runs everywhere)
  • Test business logic independently from UI
  • Use fakes/stubs instead of mocks where practical
  • Test edge cases: empty states, error states, boundary values
  • Test deep link routing in DeepLinkRouterTest
  • Keep tests fast — no network, no disk I/O in unit tests

DON'T

  • Don't test framework behavior (Compose internals, Room queries)
  • Don't create tests that depend on other feature modules
  • Don't use Thread.sleep — use coroutine test dispatchers
  • Don't rely on test execution order

Running Tests

# All KMP tests
./gradlew allTests

# Specific module
./gradlew :feature:docs:allTests

# Code quality
./gradlew spotlessCheck detekt

# Full verification
./gradlew spotlessCheck detekt kmpSmokeCompile test allTests

CI Integration

Tests run automatically on:

  • Pull request creation/update
  • Push to main
  • Pre-release validation

The CI workflow uses ubuntu-24.04 with JDK 21 and Gradle caching.