Foreword. Preface. I. BACKGROUND. 1. Test-Driven Development. What Is Test-Driven Development? Let the Computer Tell You. A Quick Example. Summary. 2. Refactoring. What Is Refactoring? When to Refactor. How to Refactor. Some Important Refactorings. Refactoring to Patterns. Summary. 3. Programming By Intention. Names. Simplicity. Warranted Assumptions. How to Program by Intention. “No Comment”. Summary. II. TOOLS AND TECHNIQUES. 4. JUNIT. Architectural Overview. The Assertions. Writing a TestCase. Running Your Tests. Using setUp() and tearDown(). Using TestSuite. How Does It All Fit Together? Where Do Tests Belong? Tips. Summary. 5. JUNITEXTENSIONS. Standard Extensions. Adding Missing Asserts with MockObjects. Performance and Scalability with JUnitPerf. Daedalos JUnit Extensions. Writing XML-Based Tests with xmlUnit. Gargoyle Software JUnit Extensions. 6. JUNIT-Related Tools. Jester. NoUnit. Clover. Eclipse. IDEA. 7. MockObjects. Mock Objects. An Illustrative Example. Uses for Mock Objects. Wouldn't It Be Nice? A Common Example. The MockObjects Framework. MockMaker. EasyMock. Summary. 8. Developing a GUI Test-First. The Example. The AWT Robot. Brute Force. JFCUnit. Jemmy. Ultra-Thin GUI. Summary. III. A JAVA PROJECT: TEST-DRIVEN END TO END. 9. THEPROJECT. Overview. User Stories and Tasks. 10. Movie List. Make a Movie Container. Make a Movie List GUI. Add a Movie in the GUI. Retrospective. 11. Movies Can Be Renamed. Support Movie Name Editing. Movie Rename GUI. Retrospective. 12. Movies Are Unique. Movies Are Unique. Error Message on Non-Uniqueness. Retrospective. 13. Ratings. Add a Single Rating to Movie. Show the Rating in the GUI. Edit the Rating. Retrospective. 14. Categories. Add a Category. Show the Category in the GUI. Add a Selection of Category. Retrospective. 15. Filter On Category. Get a Sublist Based on Category. Support an ALL category. Add a Category Selector to the GUI. Handle Changing a Movie's Category. Interface Cleanup. Retrospective. 16. Persistence. Write to a Flat File. Save-As in GUI. Save in GUI. Read from a Flat File. Load in GUI. Retrospective. 17. Sorting. Compare Movies. Sort a MovieList. Ask a MovieListEditor for Sorted Lists. Add a Way to Sort to the GUI. Retrospective. 18. Multiple Ratings. Multiple Ratings. Rating Source. Revised Persistence. Show Multiple Ratings in the GUI. Add a Rating in the GUI. Remove the Single-Rating Field. Retrospective. 19. Reviews. Add a Review to Ratings. Save Review. Load Review. Display Review. Add a Review. Retrospective. 20. Project Retrospective. The Design. Test vs Application. Test Quality. Our Use of Mocks. General Comments. Debugging. List of Tests. Summary. IV. XUNIT FAMILY MEMBERS. 21. RUBYUNIT. 22. SUNIT. 23. CPPUNIT. 24. NUNIT. 25. PYUNIT. 26. VBUNIT. V. APPENDICES. Appendix A: Extreme Programming. The Agile Revolution. eXtreme Programming. The Four Variables. The Values. The Practices. Summary. Appendix B: Agilemodeling. The Myths Surrounding Modeling. An Introduction to Agile Modeling (AM). What Are Agile Models? Appendix C: Online Resources. Forums. Information on Agile Processes. Information on Extreme Programming. JUnit-Related Software. JUnit-Related Information. Tools. Other XUnit Family Members. Companies. Miscellaneous. Appendix D: Answers To Exercises. Bibliography. Index.