8.1 What is an integration test?
8.1.1 The role of integration tests
8.1.2 The test pyramid revisited
8.1.3 Integration testing versus failing fast
8.2 Which out-of-process dependencies to test directly
8.2.1 The two types of out-of-process dependencies
8.2.2 Working with both managed and unmanaged dependencies
8.2.3 What if you can’t use a real database in integration tests?
8.3 Integration testing: An example
8.3.1 What scenarios to test?
8.3.2 Categorizing the database and the message bus
8.3.3 What about end-to-end testing?
8.3.4 Integration testing: The first try
8.4 Using interfaces to abstract dependencies
8.4.1 Interfaces and loose coupling
8.4.2 Why use interfaces for out-of-process dependencies?
8.4.3 Using interfaces for in-process dependencies
8.5 Integration testing best practices
8.5.1 Making domain model boundaries explicit
8.5.2 Reducing the number of layers
8.5.3 Eliminating circular dependencies
8.5.4 Using multiple act sections in a test
8.6 How to test logging functionality?
8.6.1 Should you test logging?
8.6.2 How to test logging?
8.6.3 How much logging is enough?
8.6.4 How to pass logger instances around?