# Testing Patterns ## Overview Testing patterns provide structured approaches to writing reliable, maintainable, and expressive tests. They address common challenges: isolating units under test, structuring test logic clearly, managing complex test data, and abstracting UI interactions for end-to-end tests. ## Pattern Comparison | Pattern | Purpose | Scope | Key Benefit | |---|---|---|---| | **Test Doubles** | Replace real dependencies with controlled substitutes | Unit / Integration | Isolation from external systems | | **Arrange-Act-Assert** | Structure each test in three clear phases | Unit / Integration | Readability and consistency | | **Given-When-Then** | Express tests as BDD scenarios | Acceptance / BDD | Business-readable specifications | | **Page Object** | Encapsulate UI page structure behind an API | UI / E2E | Decouple tests from page layout | | **Test Data Builder** | Construct complex test fixtures fluently | Unit / Integration | Reduce boilerplate, improve clarity | ## When to Use Which - **Need to isolate a unit from its dependencies?** Use **Test Doubles** (mock, stub, spy, fake, dummy). - **Want a simple, consistent test layout?** Use **Arrange-Act-Assert** for any unit or integration test. - **Writing acceptance tests with stakeholders?** Use **Given-When-Then** for natural-language scenarios. - **Testing web UIs that change layout frequently?** Use **Page Object** to centralise selectors. - **Creating many similar but slightly different test objects?** Use **Test Data Builder** for fluent construction. ## Relationships Between Patterns - **Arrange-Act-Assert** and **Given-When-Then** are structural alternatives; AAA is more common in unit tests, GWT in BDD. - **Test Doubles** are used inside the "Arrange" / "Given" phase of either structure. - **Test Data Builder** simplifies the "Arrange" / "Given" phase when fixtures are complex. - **Page Object** is typically combined with AAA or GWT for UI tests. ## Further Reading - *xUnit Test Patterns* by Gerard Meszaros - *Growing Object-Oriented Software, Guided by Tests* by Freeman & Pryce - Martin Fowler's "Mocks Aren't Stubs" article