Introduction
- Screenshot: Class diagram of the dictionary.
Automating Unit Tests
- Screenshot: The AWT test runner.
- Screenshot: The Swing test runner.
- Screenshot: StringBufferTest without tests.
- Screenshot: Test runner reports a failure.
Basic Steps of the Test-First Approach
- Screenshot: Top-down versus bottom-up approaches.
- Screenshot: A small test class hierarchy.
- Screenshot: Package structure with test classes.
The Inner Life of a Test Framework
- Screenshot: JUnit class diagram.
- Screenshot: Sequence diagram for the start of a test case.
Dummy and Mock Objects for Independence
- Screenshot: Schematic view of the Dependency Inversion Principle.
- Screenshot: Schematic view of the mock objects hierarchy.
Inheritance and Polymorphism
- Screenshot: A simple inheritance hierarchy.
- Screenshot: A parallel test hierarchy.
- Screenshot: Interfaces.
- Screenshot: Interface test classes.
Persistent Objects
- Screenshot: Object model of the CRM app.
- Screenshot: An object-centered persistence interface.
Web apps
- Screenshot: MyServlet in the browser.
- Screenshot: Test case running in Cactus.
- Screenshot: ServletInvocation.
Graphical User Interfaces
- Screenshot: The desired Product Editor layout.
- Screenshot: A "rudimentary" layout.
- Screenshot: The improved layout.
The Role of Unit Tests in the Software Process
- Screenshot: Activities, intermediate results, and products in the development process.
- Screenshot: Quality-assurance tasks.
- Screenshot: The waterfall model [Boehm76].
- Screenshot: An incremental process.
- Screenshot: Comparing the costs of manual versus automated testing.
- Screenshot: Structure of the Rational Unified Process.
- Screenshot: Relations between the RUP's testing artifacts.
Appendix B: Unit Tests with Other Programming Languages
- Screenshot B.1: The SUnit test runner.
- Screenshot B.2: A graphical test runner.