Skip to main content

Test your apps

Connect docs via MCP

App Framework applications have three testing tiers, each with a different scope, speed, and infrastructure requirement. Use the tier that matches what you are testing.

Unit tests

Unit tests mock all infrastructure and run entirely in-process—no network calls, no credentials, no running services required.

The application_sdk.testing module provides in-memory mocks for every infrastructure service the framework uses in production. Your @task and Handler methods call the same interface as in production; only the backing implementation differs. Tests run in milliseconds and are fully deterministic.

Use unit tests to verify task logic, handler behavior, and infrastructure interactions in isolation. They're the fastest tests to run and the first line of defense in CI.

Unit testing

Integration tests

Integration tests exercise the full HTTP-to-app run path with a locally running app server backed by real Dapr and Temporal services. Use integration tests to verify that your connector's credentials work, your preflight checks reflect real system state, and your task graph executes correctly end to end.

Integration testing

End-to-end tests

End-to-end tests validate the complete production data flow on a live Atlan tenant. The Automation Engine drives the full DAG—extract → query intelligence → publish → lineage—and the test asserts that the expected assets and lineage edges appear in Atlan. These tests run in CI, triggered by the e2e PR label, and take 10–20 minutes.

End-to-end testing

Tier selection

Start with unit tests—they run instantly, require no infrastructure, and catch the majority of logic errors. Move to integration tests when you need to verify connectivity to a real source or the behavior of your full task sequence. Reserve end-to-end tests for validating the complete data flow through the Atlan platform, including asset creation and lineage.

Naming and structure

Follow these conventions so tests are predictable to navigate and consistent with the SDK's own test suite:

  • Files: test_<module_name>.py (for example, statestore.pytest_statestore.py)
  • Classes: Test<ClassName> (for example, StateStoreTestStateStore)
  • Methods: test_<method_name>_<scenario> (for example, test_get_state_success, test_get_state_not_found_returns_empty_dict)
  • Directories: separate unit tests from integration tests:
tests/
unit/
test_handler.py
tasks/
test_fetch.py
test_transform.py
integration/
my_connector/
scenarios.py
test_integration.py
e2e/
test_<connector>_e2e.py

Unit tests run without any external services and are the default in CI. Integration tests require local Dapr and Temporal services and run on a separate CI step. End-to-end tests require a live Atlan tenant and run as a dedicated pipeline stage triggered by label.