What this book covers
Chapter 1, Desired Test Declaration, uses C++ to write your first test starting from an empty project.
Chapter 2, Test Results, reports and uses test results so that you can quickly know what parts of a project are working and what parts are failing.
Chapter 3, The TDD Process, uses TDD on purpose by identifying the steps you’ve already been doing.
Chapter 4, Adding Tests to a Project, enhances tests to pass or fail based on whether your expectations are being met.
Chapter 5, Adding More Confirm Types, makes tests more capable by giving you the power to check any value types to see if they meet expectations.
Chapter 6, Explore Improvements Early, looks for other improvements and shows you how to step back and explore ideas you might not have thought of up to this point.
Chapter 7, Test Setup and Teardown, prepares tests to run and the cleanup afterward so that you can focus tests on what they need to do which helps make the tests easier to understand.
Chapter 8, What Makes a Good Test?, provides advice and learning from other chapters to reinforce what you’ve learned so far and encourages you to continue with hints of topics in later chapters.
Chapter 9, Using Tests, builds a logging library that puts everything you’ve learned so far into practical use.
Chapter 10, The TDD Process in Depth, practices using TDD to add features to a growing project including how to handle design changes.
Chapter 11, Managing Dependencies, adds features that can be exchanged, showing you how to test unreliable software components and how to make progress even when you don’t have all the components that you need.
Chapter 12, Creating Better Test Confirmations, uses Hamcrest matchers to improve tests by letting you verify expectations more naturally.
Chapter 13, How To Test Floating Point and Custom Values, shows how to reliably use floats and how to extend Hamcrest matchers to meet custom needs.
Chapter 14, How To Test Services, covers how services are different and how to test services.
Chapter 15, How To Test With Multiple Threads, simplifies and coordinates tests with multiple threads so that you can avoid race conditions while testing every possible thread interaction reliably and predictably.