Test multiple components working together across real boundaries (database, HTTP, message queue, filesystem) and decide when to use real dependencies versus test doubles — use when verifying wiring, serialization, transactions, or contracts between modules, or when the user asks for integration/end-to-end tests, testcontainers, or help choosing between mocks and real services.