contents


preface
acknowledgments
about this book
about the cover illustration

Part 1 A TDD primer

1 The big picture
1.1 The challenge: solving the right problem right
1.2 Solution: being test-driven
1.3 Build it right: TDD
1.4 Build the right thing: acceptance TDD
1.5 Tools for test-driven development
1.6 Summary
2 Beginning TDD
2.1 From requirements to tests
2.2 Choosing the first test
2.3 Breadth-first, depth-first
2.4 Let’s not forget to refactor
2.5 Adding a bit of error handling
2.6 Loose ends on the test list
2.7 Summary
3 Refactoring in small steps
3.1 Exploring a potential solution
3.2 Changing design in a controlled manner
3.3 Taking the new design further
3.4 Summary
4 Concepts and patterns for TDD
4.1 How to write tests and make them pass
4.2 Essential testing concepts
4.3 Closer look into test doubles
4.4 Guidelines for testable designs
4.5 Unit-testing patterns
4.6 Working with legacy code
4.7 Summary

Part 2 Applying TDD to specific technologies

5 Test-driving web components
5.1 MVC in web applications in 60 seconds
5.2 Taming the controller
5.3 Creating the view test-first
5.4 TDD with component-based web frameworks
5.5 Summary
6 Test-driving data access
6.1 Exploring the problem domain
6.2 Driving data access with unit tests
6.3 Writing integration tests before the code
6.4 Integration tests in action
6.5 Populating data for integration tests
6.6 Should I drive with unit or integration tests?
6.7 File-system access
6.8 Summary
7 Test-driving the unpredictable
7.1 Test-driving time-based functionality
7.2 Test-driving multithreaded code
7.3 Standard synchronization objects
7.4 Summary
8 Test-driving Swing
8.1 What to test in a Swing UI
8.2 Patterns for testable UI code
8.3 Tools for testing view components
8.4 Test-driving a view component
8.5 Summary

Part 3 Building products with acceptance TDD

9 Acceptance TDD explained
9.1 Introduction to user stories
9.2 Acceptance tests
9.3 Understanding the process
9.4 Acceptance TDD as a team activity
9.5 Benefits of acceptance TDD
9.6 What are we testing, exactly?
9.7 Brief overview of available tools
9.8 Summary
10 Creating acceptance tests with Fit
10.1 What’s Fit?
10.2 Three built-in fixtures
10.3 Beyond the built-ins with FitLibrary
10.4 Executing Fit tests
10.5 Summary
11 Strategies for implementing acceptance tests
11.1 What should acceptance tests test?
11.2 Implementation approaches
11.3 Technology-specific considerations
11.4 Tips for common problems
11.5 Summary
12 Adopting TDD
12.1 What it takes to adopt TDD
12.2 Getting others aboard
12.3 How to fight resistance
12.4 How to facilitate adoption
12.5 Summary

 
appendix A: Brief JUnit 4 tutorial
appendix B: Brief JUnit 3.8 tutorial
appendix C: Brief EasyMock tutorial
appendix D: Running tests with Ant
resources
index