ii Preface Preface jextprockbk-PREFACE-1 Copyright Copyright iii Preface Preface jextprockbk-DEDICATION Dedication Dedication ix Preface Preface jextprockbk-PREFACE-2 Preface Preface 1 Chapter 1 XP Tools jextprockbk-CHP-1 Chapter 1 XP Tools 1 Chapter 1 XP Tools jextprockbk-CHP-1-SECT-1 Section 1.1 Java and XP 2 Chapter 1 XP Tools jextprockbk-CHP-1-SECT-2 Section 1.2 Tools and Philosophies 4 Chapter 1 XP Tools jextprockbk-CHP-1-SECT-3 Section 1.3 Open Source Toolkit 11 Chapter 2 XP Overview jextprockbk-CHP-2 Chapter 2 XP Overview 11 Chapter 2 XP Overview jextprockbk-CHP-2-SECT-1 Section 2.1 What Is XP? 14 Chapter 2 XP Overview jextprockbk-CHP-2-SECT-2 Section 2.2 Coding 17 Chapter 2 XP Overview jextprockbk-CHP-2-SECT-3 Section 2.3 Unit Testing 22 Chapter 2 XP Overview jextprockbk-CHP-2-SECT-4 Section 2.4 Refactoring 24 Chapter 2 XP Overview jextprockbk-CHP-2-SECT-5 Section 2.5 Design 26 Chapter 2 XP Overview jextprockbk-CHP-2-SECT-6 Section 2.6 Builds 28 Chapter 3 Ant jextprockbk-CHP-3 Chapter 3 Ant 28 Chapter 3 Ant jextprockbk-CHP-3-SECT-1 Section 3.0 Introduction 29 Chapter 3 Ant jextprockbk-CHP-3-SECT-2 Section 3.1 Writing a Basic Buildfile 31 Chapter 3 Ant jextprockbk-CHP-3-SECT-3 Section 3.2 Running Ant 32 Chapter 3 Ant jextprockbk-CHP-3-SECT-4 Section 3.3 Providing Help 34 Chapter 3 Ant jextprockbk-CHP-3-SECT-5 Section 3.4 Using Environment Variables 36 Chapter 3 Ant jextprockbk-CHP-3-SECT-6 Section 3.5 Passing Arguments to a Buildfile 39 Chapter 3 Ant jextprockbk-CHP-3-SECT-7 Section 3.6 Checking for the Existence of Properties 40 Chapter 3 Ant jextprockbk-CHP-3-SECT-8 Section 3.7 Defining a Classpath 42 Chapter 3 Ant jextprockbk-CHP-3-SECT-9 Section 3.8 Defining Platform-Independent Paths 43 Chapter 3 Ant jextprockbk-CHP-3-SECT-10 Section 3.9 Including and Excluding Files 44 Chapter 3 Ant jextprockbk-CHP-3-SECT-11 Section 3.10 Implementing Conditional Logic 45 Chapter 3 Ant jextprockbk-CHP-3-SECT-12 Section 3.11 Defining a Consistent Environment 46 Chapter 3 Ant jextprockbk-CHP-3-SECT-13 Section 3.12 Preventing Build Breaks 47 Chapter 3 Ant jextprockbk-CHP-3-SECT-14 Section 3.13 Building JAR Files 48 Chapter 3 Ant jextprockbk-CHP-3-SECT-15 Section 3.14 Installing JUnit 50 Chapter 3 Ant jextprockbk-CHP-3-SECT-16 Section 3.15 Running Unit Tests 53 Chapter 3 Ant jextprockbk-CHP-3-SECT-17 Section 3.16 Running Specific Tests 54 Chapter 3 Ant jextprockbk-CHP-3-SECT-18 Section 3.17 Generating a Test Report 55 Chapter 3 Ant jextprockbk-CHP-3-SECT-19 Section 3.18 Checking Out Code from CVS 56 Chapter 3 Ant jextprockbk-CHP-3-SECT-20 Section 3.19 Bootstrapping a Build 59 Chapter 4 JUnit jextprockbk-CHP-4 Chapter 4 JUnit 59 Chapter 4 JUnit jextprockbk-CHP-4-SECT-1 Section 4.0 Introduction 60 Chapter 4 JUnit jextprockbk-CHP-4-SECT-2 Section 4.1 Getting Started 62 Chapter 4 JUnit jextprockbk-CHP-4-SECT-3 Section 4.2 Running JUnit 65 Chapter 4 JUnit jextprockbk-CHP-4-SECT-4 Section 4.3 assertXXX( ) Methods 68 Chapter 4 JUnit jextprockbk-CHP-4-SECT-5 Section 4.4 Unit Test Granularity 69 Chapter 4 JUnit jextprockbk-CHP-4-SECT-6 Section 4.5 Set Up and Tear Down 71 Chapter 4 JUnit jextprockbk-CHP-4-SECT-7 Section 4.6 One-Time Set Up and Tear Down 73 Chapter 4 JUnit jextprockbk-CHP-4-SECT-8 Section 4.7 Organizing Tests into Test Suites 74 Chapter 4 JUnit jextprockbk-CHP-4-SECT-9 Section 4.8 Running a Test Class Directly 75 Chapter 4 JUnit jextprockbk-CHP-4-SECT-10 Section 4.9 Repeating Tests 76 Chapter 4 JUnit jextprockbk-CHP-4-SECT-11 Section 4.10 Test Naming Conventions 77 Chapter 4 JUnit jextprockbk-CHP-4-SECT-12 Section 4.11 Unit Test Organization 79 Chapter 4 JUnit jextprockbk-CHP-4-SECT-13 Section 4.12 Exception Handling 80 Chapter 4 JUnit jextprockbk-CHP-4-SECT-14 Section 4.13 Running Tests Concurrently 81 Chapter 4 JUnit jextprockbk-CHP-4-SECT-15 Section 4.14 Testing Asynchronous Methods 84 Chapter 4 JUnit jextprockbk-CHP-4-SECT-16 Section 4.15 Writing a Base Class for Your Tests 85 Chapter 4 JUnit jextprockbk-CHP-4-SECT-17 Section 4.16 Testing Swing Code 89 Chapter 4 JUnit jextprockbk-CHP-4-SECT-18 Section 4.17 Avoiding Swing Threading Problems 92 Chapter 4 JUnit jextprockbk-CHP-4-SECT-19 Section 4.18 Testing with the Robot 93 Chapter 4 JUnit jextprockbk-CHP-4-SECT-20 Section 4.19 Testing Database Logic 94 Chapter 4 JUnit jextprockbk-CHP-4-SECT-21 Section 4.20 Repeatedly Testing the Same Method 99 Chapter 5 HttpUnit jextprockbk-CHP-5 Chapter 5 HttpUnit 99 Chapter 5 HttpUnit jextprockbk-CHP-5-SECT-1 Section 5.0 Introduction 100 Chapter 5 HttpUnit jextprockbk-CHP-5-SECT-2 Section 5.1 Installing HttpUnit 100 Chapter 5 HttpUnit jextprockbk-CHP-5-SECT-3 Section 5.2 Preparing for Test-First Development 104 Chapter 5 HttpUnit jextprockbk-CHP-5-SECT-4 Section 5.3 Checking a Static Web Page 106 Chapter 5 HttpUnit jextprockbk-CHP-5-SECT-5 Section 5.4 Following Hyperlinks 107 Chapter 5 HttpUnit jextprockbk-CHP-5-SECT-6 Section 5.5 Writing Testable HTML 108 Chapter 5 HttpUnit jextprockbk-CHP-5-SECT-7 Section 5.6 Testing HTML Tables 111 Chapter 5 HttpUnit jextprockbk-CHP-5-SECT-8 Section 5.7 Testing a Form Tag and Refactoring Your Tests 113 Chapter 5 HttpUnit jextprockbk-CHP-5-SECT-9 Section 5.8 Testing for Elements on HTML Forms 116 Chapter 5 HttpUnit jextprockbk-CHP-5-SECT-10 Section 5.9 Submitting Form Data 120 Chapter 5 HttpUnit jextprockbk-CHP-5-SECT-11 Section 5.10 Testing Through a Firewall 120 Chapter 5 HttpUnit jextprockbk-CHP-5-SECT-12 Section 5.11 Testing Cookies 122 Chapter 5 HttpUnit jextprockbk-CHP-5-SECT-13 Section 5.12 Testing Secure Pages 124 Chapter 6 Mock Objects jextprockbk-CHP-6 Chapter 6 Mock Objects 124 Chapter 6 Mock Objects jextprockbk-CHP-6-SECT-1 Section 6.0 Introduction 125 Chapter 6 Mock Objects jextprockbk-CHP-6-SECT-2 Section 6.1 Event Listener Testing 130 Chapter 6 Mock Objects jextprockbk-CHP-6-SECT-3 Section 6.2 Mock Object Self-Validation 133 Chapter 6 Mock Objects jextprockbk-CHP-6-SECT-4 Section 6.3 Writing Testable JDBC Code 135 Chapter 6 Mock Objects jextprockbk-CHP-6-SECT-5 Section 6.4 Testing JDBC Code 138 Chapter 6 Mock Objects jextprockbk-CHP-6-SECT-6 Section 6.5 Generating Mock Objects with MockMaker 140 Chapter 6 Mock Objects jextprockbk-CHP-6-SECT-7 Section 6.6 Breaking Up Methods to Avoid Mock Objects 142 Chapter 6 Mock Objects jextprockbk-CHP-6-SECT-8 Section 6.7 Testing Server-Side Business Logic 145 Chapter 7 Cactus jextprockbk-CHP-7 Chapter 7 Cactus 145 Chapter 7 Cactus jextprockbk-CHP-7-SECT-1 Section 7.0 Introduction 148 Chapter 7 Cactus jextprockbk-CHP-7-SECT-2 Section 7.1 Configuring Cactus 149 Chapter 7 Cactus jextprockbk-CHP-7-SECT-3 Section 7.2 Setting Up a Stable Build Environment 155 Chapter 7 Cactus jextprockbk-CHP-7-SECT-4 Section 7.3 Creating the cactus.properties File 157 Chapter 7 Cactus jextprockbk-CHP-7-SECT-5 Section 7.4 Generating the cactus.properties File Automatically 159 Chapter 7 Cactus jextprockbk-CHP-7-SECT-6 Section 7.5 Writing a Cactus Test 162 Chapter 7 Cactus jextprockbk-CHP-7-SECT-7 Section 7.6 Submitting Form Data 167 Chapter 7 Cactus jextprockbk-CHP-7-SECT-8 Section 7.7 Testing Cookies 170 Chapter 7 Cactus jextprockbk-CHP-7-SECT-9 Section 7.8 Testing Session Tracking Using HttpSession 176 Chapter 7 Cactus jextprockbk-CHP-7-SECT-10 Section 7.9 Testing Servlet Initialization Parameters 177 Chapter 7 Cactus jextprockbk-CHP-7-SECT-11 Section 7.10 Testing Servlet Filters 180 Chapter 7 Cactus jextprockbk-CHP-7-SECT-12 Section 7.11 Securing Cactus Tests 183 Chapter 7 Cactus jextprockbk-CHP-7-SECT-13 Section 7.12 Using HttpUnit to Perform Complex Assertions 183 Chapter 7 Cactus jextprockbk-CHP-7-SECT-14 Section 7.13 Testing the Output of a JSP 185 Chapter 7 Cactus jextprockbk-CHP-7-SECT-15 Section 7.14 When Not to Use Cactus 185 Chapter 7 Cactus jextprockbk-CHP-7-SECT-16 Section 7.15 Designing Testable JSPs 187 Chapter 8 JUnitPerf jextprockbk-CHP-8 Chapter 8 JUnitPerf 187 Chapter 8 JUnitPerf jextprockbk-CHP-8-SECT-1 Section 8.0 Introduction 188 Chapter 8 JUnitPerf jextprockbk-CHP-8-SECT-2 Section 8.1 When to Use JUnitPerf 189 Chapter 8 JUnitPerf jextprockbk-CHP-8-SECT-3 Section 8.2 Creating a Timed Test 192 Chapter 8 JUnitPerf jextprockbk-CHP-8-SECT-4 Section 8.3 Creating a LoadTest 194 Chapter 8 JUnitPerf jextprockbk-CHP-8-SECT-5 Section 8.4 Creating a Timed Test for Varying Loads 195 Chapter 8 JUnitPerf jextprockbk-CHP-8-SECT-6 Section 8.5 Testing Individual Response Times Under Load 197 Chapter 8 JUnitPerf jextprockbk-CHP-8-SECT-7 Section 8.6 Running a TestSuite with Ant 198 Chapter 8 JUnitPerf jextprockbk-CHP-8-SECT-8 Section 8.7 Generating JUnitPerf Tests 201 Chapter 9 XDoclet jextprockbk-CHP-9 Chapter 9 XDoclet 201 Chapter 9 XDoclet jextprockbk-CHP-9-SECT-1 Section 9.0 Introduction 202 Chapter 9 XDoclet jextprockbk-CHP-9-SECT-2 Section 9.1 Setting Up a Development Environment for Generated Files 204 Chapter 9 XDoclet jextprockbk-CHP-9-SECT-3 Section 9.2 Setting Up Ant to Run XDoclet 207 Chapter 9 XDoclet jextprockbk-CHP-9-SECT-4 Section 9.3 Regenerating Files That Have Changed 208 Chapter 9 XDoclet jextprockbk-CHP-9-SECT-5 Section 9.4 Generating the EJB Deployment Descriptor 212 Chapter 9 XDoclet jextprockbk-CHP-9-SECT-6 Section 9.5 Specifying Different EJB Specifications 212 Chapter 9 XDoclet jextprockbk-CHP-9-SECT-7 Section 9.6 Generating EJB Home and Remote Interfaces 217 Chapter 9 XDoclet jextprockbk-CHP-9-SECT-8 Section 9.7 Creating and Executing a Custom Template 220 Chapter 9 XDoclet jextprockbk-CHP-9-SECT-9 Section 9.8 Extending XDoclet to Generate Custom Files 222 Chapter 9 XDoclet jextprockbk-CHP-9-SECT-10 Section 9.9 Creating an Ant XDoclet Task 226 Chapter 9 XDoclet jextprockbk-CHP-9-SECT-11 Section 9.10 Creating an XDoclet Tag Handler 232 Chapter 9 XDoclet jextprockbk-CHP-9-SECT-12 Section 9.11 Creating a Template File 234 Chapter 9 XDoclet jextprockbk-CHP-9-SECT-13 Section 9.12 Creating an XDoclet xdoclet.xml File 237 Chapter 9 XDoclet jextprockbk-CHP-9-SECT-14 Section 9.13 Creating an XDoclet Module 239 Chapter 10 Tomcat and JBoss jextprockbk-CHP-10 Chapter 10 Tomcat and JBoss 239 Chapter 10 Tomcat and JBoss jextprockbk-CHP-10-SECT-1 Section 10.0 Introduction 239 Chapter 10 Tomcat and JBoss jextprockbk-CHP-10-SECT-1 Section 10. Introduction 239 Chapter 10 Tomcat and JBoss jextprockbk-CHP-10-SECT-2 Section 10.1 Managing Web Applications Deployed to Tomcat 240 Chapter 10 Tomcat and JBoss jextprockbk-CHP-10-SECT-3 Section 10.2 Hot-Deploying to Tomcat 242 Chapter 10 Tomcat and JBoss jextprockbk-CHP-10-SECT-4 Section 10.3 Removing a Web Application from Tomcat 244 Chapter 10 Tomcat and JBoss jextprockbk-CHP-10-SECT-5 Section 10.4 Checking If a Web Application Is Deployed 245 Chapter 10 Tomcat and JBoss jextprockbk-CHP-10-SECT-6 Section 10.5 Starting Tomcat with Ant 252 Chapter 10 Tomcat and JBoss jextprockbk-CHP-10-SECT-7 Section 10.6 Stopping Tomcat with Ant 253 Chapter 10 Tomcat and JBoss jextprockbk-CHP-10-SECT-8 Section 10.7 Setting Up Ant to Use Tomcat's Manager Web Application 254 Chapter 10 Tomcat and JBoss jextprockbk-CHP-10-SECT-9 Section 10.8 Hot-Deploying to JBoss 255 Chapter 10 Tomcat and JBoss jextprockbk-CHP-10-SECT-10 Section 10.9 Hot-Deploying a Web Application to JBoss 256 Chapter 10 Tomcat and JBoss jextprockbk-CHP-10-SECT-11 Section 10.10 Testing Against Multiple Servers 258 Chapter 11 Additional Topics jextprockbk-CHP-11 Chapter 11 Additional Topics 258 Chapter 11 Additional Topics jextprockbk-CHP-11-SECT-1 Section 11.0 Introduction 258 Chapter 11 Additional Topics jextprockbk-CHP-11-SECT-2 Section 11.1 Testing XML Files 259 Chapter 11 Additional Topics jextprockbk-CHP-11-SECT-3 Section 11.2 Enterprise JavaBeans Testing Tools 260 Chapter 11 Additional Topics jextprockbk-CHP-11-SECT-4 Section 11.3 Avoiding EJB Testing 262 Chapter 11 Additional Topics jextprockbk-CHP-11-SECT-5 Section 11.4 Testing Swing GUIs 263 Chapter 11 Additional Topics jextprockbk-CHP-11-SECT-6 Section 11.5 Testing Private Methods 265 Index Index index Index Index 276 Colophon Colophon jextprockbk-COLOPHON Colophon Colophon