Testing

Testing types, patterns, and best practices for building confidence in your delivery pipeline.

Adapted from Dojo Consortium

A reliable test suite is essential for continuous delivery. These pages cover the different types of tests, when to use each, and best practices for test architecture.

Test Types

Type Purpose
Unit Tests Verify individual components in isolation
Integration Tests Verify components work together
Functional Tests Verify user-facing behavior
End-to-End Tests Verify complete user workflows
Contract Tests Verify API contracts between services
Static Analysis Catch issues without running code
Test Doubles Patterns for isolating dependencies in tests

This content is adapted from the Dojo Consortium, licensed under CC BY 4.0.


Unit Tests

Fast, deterministic tests that verify individual functions, methods, or components in isolation with test doubles for dependencies.

Integration Tests

Deterministic tests that verify how units interact together or with external system boundaries using test doubles for non-deterministic dependencies.

Functional Tests

Deterministic tests that verify all modules of a sub-system work together from the actor’s perspective, using test doubles for external dependencies.

End-to-End Tests

Non-deterministic tests that validate the entire software system along with its integration with external interfaces and production-like scenarios.

Contract Tests

Non-deterministic tests that validate test doubles by verifying API contract format against live external systems.

Static Analysis

Code analysis tools that evaluate non-running code for security vulnerabilities, complexity, and best practice violations.

Test Doubles

Patterns for isolating dependencies in tests: stubs, mocks, fakes, spies, and dummies.