1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><META http-equiv="Content-Type" content="text/html; charset=utf-8"><style type="text/css" media="print">.hide{display:none}</style></head>
2
3
4<body style="margin:0;padding:0"><div class="hide">
5
6
7
8
9
10<div bgcolor="#ffffff" vlink="blue" link="blue">
11<table border="0" width="100%"><tr><td bgcolor="eeeeee" align="right"><font face="arial,sans-serif"><a name="0.1_1"><b>Page 1</b></a></font></td></tr></table><font size="3" face="Times"><span style="font-size:16px;font-family:Times">
12<div style="position:absolute;top:1148;left:738">v</div>
13</span></font>
14<font size="6" face="Times"><span style="font-size:48px;font-family:Times">
15
16<div style="position:absolute;top:355;left:162"><b>Contents</b></div>
17</span></font>
18<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
19<div style="position:absolute;top:512;left:270">Foreword</div>
20<div style="position:absolute;top:512;left:730">xiii</div>
21<div style="position:absolute;top:530;left:270">Preface</div>
22<div style="position:absolute;top:530;left:734">xv</div>
23<div style="position:absolute;top:548;left:270">Acknowledgments</div>
24<div style="position:absolute;top:548;left:730">xxi</div>
25<div style="position:absolute;top:566;left:270">About the Authors</div>
26
27<div style="position:absolute;top:566;left:723">xxiii</div>
28</span></font>
29<font size="8" face="Times"><span style="font-size:16px;font-family:Times">
30<div style="position:absolute;top:611;left:162">Chapter 1</div>
31<div style="position:absolute;top:611;left:270">Getting Started</div>
32<div style="position:absolute;top:611;left:736">1</div>
33</span></font>
34<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
35<div style="position:absolute;top:640;left:270">Beyond JUnit 3</div>
36<div style="position:absolute;top:640;left:738">3</div>
37</span></font>
38
39<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
40<div style="position:absolute;top:660;left:288">Stateful Classes</div>
41</span></font>
42<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
43<div style="position:absolute;top:659;left:738">3</div>
44</span></font>
45<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
46<div style="position:absolute;top:676;left:288">Parameters</div>
47</span></font>
48<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
49<div style="position:absolute;top:675;left:738">4</div>
50</span></font>
51<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
52
53<div style="position:absolute;top:693;left:288">Base Classes</div>
54</span></font>
55<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
56<div style="position:absolute;top:692;left:738">4</div>
57</span></font>
58<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
59<div style="position:absolute;top:709;left:288">Exceptions Are Not That Exceptional</div>
60</span></font>
61<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
62<div style="position:absolute;top:708;left:738">4</div>
63</span></font>
64<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
65<div style="position:absolute;top:726;left:288">Running Tests</div>
66
67</span></font>
68<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
69<div style="position:absolute;top:725;left:738">5</div>
70</span></font>
71<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
72<div style="position:absolute;top:743;left:288">Real-World Testing</div>
73</span></font>
74<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
75<div style="position:absolute;top:741;left:738">6</div>
76</span></font>
77<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
78<div style="position:absolute;top:759;left:288">Configuration Methods</div>
79</span></font>
80
81<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
82<div style="position:absolute;top:758;left:738">6</div>
83</span></font>
84<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
85<div style="position:absolute;top:775;left:288">Dependencies</div>
86</span></font>
87<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
88<div style="position:absolute;top:774;left:738">6</div>
89</span></font>
90<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
91<div style="position:absolute;top:792;left:288">Epiphanies</div>
92</span></font>
93<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
94
95<div style="position:absolute;top:791;left:738">7</div>
96<div style="position:absolute;top:808;left:270">JUnit 4</div>
97<div style="position:absolute;top:808;left:738">7</div>
98<div style="position:absolute;top:828;left:270">Designing for Testability</div>
99<div style="position:absolute;top:828;left:738">8</div>
100</span></font>
101<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
102<div style="position:absolute;top:847;left:288">Object-Oriented Programming and Encapsulation</div>
103</span></font>
104<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
105<div style="position:absolute;top:846;left:738">8</div>
106
107</span></font>
108<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
109<div style="position:absolute;top:864;left:288">The Design Patterns Revolution</div>
110</span></font>
111<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
112<div style="position:absolute;top:863;left:738">9</div>
113</span></font>
114<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
115<div style="position:absolute;top:880;left:288">Identifying the Enemy</div>
116</span></font>
117<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
118<div style="position:absolute;top:879;left:729">10</div>
119</span></font>
120
121<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
122<div style="position:absolute;top:897;left:288">Recommendations</div>
123</span></font>
124<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
125<div style="position:absolute;top:896;left:729">16</div>
126<div style="position:absolute;top:913;left:270">TestNG</div>
127<div style="position:absolute;top:913;left:729">17</div>
128</span></font>
129<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
130<div style="position:absolute;top:933;left:288">Annotations</div>
131</span></font>
132<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
133
134<div style="position:absolute;top:932;left:729">17</div>
135</span></font>
136<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
137<div style="position:absolute;top:950;left:288">Tests, Suites, and Configuration Annotations</div>
138</span></font>
139<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
140<div style="position:absolute;top:948;left:729">18</div>
141</span></font>
142<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
143<div style="position:absolute;top:966;left:288">Groups</div>
144</span></font>
145<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
146<div style="position:absolute;top:965;left:729">20</div>
147
148</span></font>
149<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
150<div style="position:absolute;top:983;left:288"><b>testng.xml</b></div>
151</span></font>
152<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
153<div style="position:absolute;top:981;left:729">21</div>
154<div style="position:absolute;top:999;left:270">Conclusion</div>
155<div style="position:absolute;top:999;left:729">21</div>
156</span></font>
157<font size="8" face="Times"><span style="font-size:16px;font-family:Times">
158<div style="position:absolute;top:1045;left:162">Chapter 2</div>
159<div style="position:absolute;top:1045;left:270">Testing Design Patterns</div>
160
161<div style="position:absolute;top:1045;left:725">23</div>
162</span></font>
163<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
164<div style="position:absolute;top:1075;left:270">Testing for Failures</div>
165<div style="position:absolute;top:1075;left:729">23</div>
166</span></font>
167<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
168<div style="position:absolute;top:1094;left:288">Reporting Errors</div>
169</span></font>
170<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
171<div style="position:absolute;top:1093;left:729">24</div>
172</span></font>
173
174<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
175<div style="position:absolute;top:1111;left:288">Runtime and Checked Exceptions</div>
176</span></font>
177<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
178<div style="position:absolute;top:1110;left:729">25</div>
179</span></font>
180<font size="2" face="Times"><span style="font-size:8px;font-family:Times">
181<div style="position:absolute;top:202;left:90">Beust.book  Page v  Thursday, August 16, 2007  10:22 AM</div>
182</span></font>
183
184<div style="position:absolute;top:1282;left:0"><hr><table border="0" width="100%"><tr><td bgcolor="eeeeee" align="right"><font face="arial,sans-serif"><a name="0.1_2"><b>Page 2</b></a></font></td></tr></table></div><font size="8" face="Times"><span style="font-size:16px;font-family:Times">
185<div style="position:absolute;top:1387;left:117">vi</div>
186
187</span></font>
188<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
189<div style="position:absolute;top:1390;left:189">Contents</div>
190<div style="position:absolute;top:1444;left:243">Testing Whether Your Code Handles Failures Gracefully</div>
191</span></font>
192<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
193<div style="position:absolute;top:1443;left:684">27</div>
194</span></font>
195<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
196<div style="position:absolute;top:1460;left:243">When Not to Use <b>expectedExceptions</b></div>
197</span></font>
198<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
199
200<div style="position:absolute;top:1459;left:684">31</div>
201</span></font>
202<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
203<div style="position:absolute;top:1477;left:243"><b>testng-failed.xml</b></div>
204</span></font>
205<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
206<div style="position:absolute;top:1476;left:684">32</div>
207<div style="position:absolute;top:1493;left:225">Factories</div>
208<div style="position:absolute;top:1493;left:684">34</div>
209</span></font>
210<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
211<div style="position:absolute;top:1513;left:243"><b>@Factory</b></div>
212
213</span></font>
214<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
215<div style="position:absolute;top:1512;left:684">35</div>
216</span></font>
217<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
218<div style="position:absolute;top:1530;left:243"><b>org.testng.ITest</b></div>
219</span></font>
220<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
221<div style="position:absolute;top:1528;left:684">38</div>
222<div style="position:absolute;top:1546;left:225">Data-Driven Testing</div>
223<div style="position:absolute;top:1546;left:684">39</div>
224</span></font>
225
226<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
227<div style="position:absolute;top:1565;left:243">Parameters and Test Methods</div>
228</span></font>
229<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
230<div style="position:absolute;top:1564;left:684">42</div>
231</span></font>
232<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
233<div style="position:absolute;top:1582;left:243">Passing Parameters with <b>testng.xml</b></div>
234</span></font>
235<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
236<div style="position:absolute;top:1581;left:684">44</div>
237</span></font>
238
239<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
240<div style="position:absolute;top:1598;left:243">Passing Parameters with <b>@DataProvider</b></div>
241</span></font>
242<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
243<div style="position:absolute;top:1597;left:684">47</div>
244</span></font>
245<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
246<div style="position:absolute;top:1615;left:243">Parameters for Data Providers</div>
247</span></font>
248<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
249<div style="position:absolute;top:1614;left:684">50</div>
250</span></font>
251
252<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
253<div style="position:absolute;top:1631;left:243">The <b>Method </b>Parameter</div>
254</span></font>
255<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
256<div style="position:absolute;top:1630;left:684">50</div>
257</span></font>
258<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
259<div style="position:absolute;top:1648;left:243">The <b>ITestContext </b>Parameter</div>
260</span></font>
261<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
262
263<div style="position:absolute;top:1647;left:684">52</div>
264</span></font>
265<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
266<div style="position:absolute;top:1664;left:243">Lazy Data Providers</div>
267</span></font>
268<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
269<div style="position:absolute;top:1663;left:684">54</div>
270</span></font>
271<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
272<div style="position:absolute;top:1681;left:243">Pros and Cons of Both Approaches</div>
273</span></font>
274<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
275<div style="position:absolute;top:1680;left:684">59</div>
276
277</span></font>
278<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
279<div style="position:absolute;top:1697;left:243">Supplying the Data</div>
280</span></font>
281<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
282<div style="position:absolute;top:1696;left:684">60</div>
283</span></font>
284<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
285<div style="position:absolute;top:1714;left:243">Data Provider or Factory?</div>
286</span></font>
287<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
288<div style="position:absolute;top:1713;left:684">62</div>
289</span></font>
290
291<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
292<div style="position:absolute;top:1730;left:243">Tying It All Together</div>
293</span></font>
294<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
295<div style="position:absolute;top:1729;left:684">63</div>
296<div style="position:absolute;top:1747;left:225">Asynchronous Testing</div>
297<div style="position:absolute;top:1747;left:684">67</div>
298<div style="position:absolute;top:1766;left:225">Testing Multithreaded Code</div>
299<div style="position:absolute;top:1766;left:684">71</div>
300</span></font>
301<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
302
303<div style="position:absolute;top:1786;left:243">Concurrent Testing</div>
304</span></font>
305<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
306<div style="position:absolute;top:1785;left:684">72</div>
307</span></font>
308<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
309<div style="position:absolute;top:1803;left:243"><b>threadPoolSize</b>, <b>invocationCount</b>, and <b>timeOut</b></div>
310</span></font>
311<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
312<div style="position:absolute;top:1801;left:684">75</div>
313
314</span></font>
315<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
316<div style="position:absolute;top:1819;left:243">Concurrent Running</div>
317</span></font>
318<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
319<div style="position:absolute;top:1818;left:684">79</div>
320</span></font>
321<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
322<div style="position:absolute;top:1835;left:243">Turning on the Parallel Bit</div>
323</span></font>
324<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
325<div style="position:absolute;top:1834;left:684">82</div>
326<div style="position:absolute;top:1852;left:225">Performance Testing</div>
327
328<div style="position:absolute;top:1852;left:684">83</div>
329</span></font>
330<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
331<div style="position:absolute;top:1871;left:243">Algorithm Complexity</div>
332</span></font>
333<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
334<div style="position:absolute;top:1870;left:684">84</div>
335</span></font>
336<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
337<div style="position:absolute;top:1888;left:243">Testing Complexity</div>
338</span></font>
339<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
340<div style="position:absolute;top:1887;left:684">87</div>
341
342<div style="position:absolute;top:1904;left:225">Mocks and Stubs</div>
343<div style="position:absolute;top:1904;left:684">90</div>
344</span></font>
345<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
346<div style="position:absolute;top:1924;left:243">Mocks versus Stubs</div>
347</span></font>
348<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
349<div style="position:absolute;top:1923;left:684">90</div>
350</span></font>
351<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
352<div style="position:absolute;top:1940;left:243">Designing for Mockability</div>
353</span></font>
354
355<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
356<div style="position:absolute;top:1939;left:684">95</div>
357</span></font>
358<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
359<div style="position:absolute;top:1957;left:243">Mock Libraries</div>
360</span></font>
361<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
362<div style="position:absolute;top:1956;left:684">96</div>
363</span></font>
364<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
365<div style="position:absolute;top:1973;left:243">Selecting the Right Strategy</div>
366</span></font>
367<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
368
369<div style="position:absolute;top:1972;left:684">99</div>
370</span></font>
371<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
372<div style="position:absolute;top:1990;left:243">Mock Pitfalls</div>
373</span></font>
374<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
375<div style="position:absolute;top:1989;left:675">100</div>
376<div style="position:absolute;top:2006;left:225">Dependent Testing</div>
377<div style="position:absolute;top:2006;left:675">103</div>
378</span></font>
379<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
380<div style="position:absolute;top:2026;left:243">Dependent Code</div>
381
382</span></font>
383<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
384<div style="position:absolute;top:2025;left:675">104</div>
385</span></font>
386<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
387<div style="position:absolute;top:2042;left:243">Dependent Testing with TestNG</div>
388</span></font>
389<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
390<div style="position:absolute;top:2041;left:675">105</div>
391</span></font>
392<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
393<div style="position:absolute;top:2059;left:243">Deciding Whether to Depend on Groups or on Methods</div>
394</span></font>
395
396<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
397<div style="position:absolute;top:2058;left:675">106</div>
398</span></font>
399<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
400<div style="position:absolute;top:2075;left:243">Dependent Testing and Threads</div>
401</span></font>
402<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
403<div style="position:absolute;top:2074;left:675">110</div>
404</span></font>
405<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
406<div style="position:absolute;top:2092;left:243">Failures of Configuration Methods</div>
407</span></font>
408<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
409
410<div style="position:absolute;top:2091;left:675">110</div>
411<div style="position:absolute;top:2108;left:225">Inheritance and Annotation Scopes</div>
412<div style="position:absolute;top:2108;left:675">113</div>
413</span></font>
414<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
415<div style="position:absolute;top:2128;left:243">The Problem</div>
416</span></font>
417<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
418<div style="position:absolute;top:2127;left:675">113</div>
419</span></font>
420<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
421<div style="position:absolute;top:2144;left:243">Pitfalls of Inheritance</div>
422
423</span></font>
424<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
425<div style="position:absolute;top:2143;left:675">116</div>
426<div style="position:absolute;top:2161;left:225">Test Groups</div>
427<div style="position:absolute;top:2161;left:675">119</div>
428</span></font>
429<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
430<div style="position:absolute;top:2180;left:243">Syntax</div>
431</span></font>
432<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
433<div style="position:absolute;top:2179;left:675">120</div>
434</span></font>
435
436<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
437<div style="position:absolute;top:2197;left:243">Groups and Runtime</div>
438</span></font>
439<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
440<div style="position:absolute;top:2196;left:675">122</div>
441</span></font>
442<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
443<div style="position:absolute;top:2213;left:243">Running Groups</div>
444</span></font>
445<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
446<div style="position:absolute;top:2212;left:675">125</div>
447</span></font>
448<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
449
450<div style="position:absolute;top:2230;left:243">Using Groups Effectively</div>
451</span></font>
452<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
453<div style="position:absolute;top:2229;left:675">127</div>
454</span></font>
455<font size="2" face="Times"><span style="font-size:8px;font-family:Times">
456<div style="position:absolute;top:1309;left:90">Beust.book  Page vi  Thursday, August 16, 2007  10:22 AM</div>
457</span></font>
458
459<div style="position:absolute;top:2389;left:0"><hr><table border="0" width="100%"><tr><td bgcolor="eeeeee" align="right"><font face="arial,sans-serif"><a name="0.1_3"><b>Page 3</b></a></font></td></tr></table></div><font size="8" face="Times"><span style="font-size:11px;font-family:Times">
460<div style="position:absolute;top:2497;left:620">Contents</div>
461</span></font>
462
463<font size="8" face="Times"><span style="font-size:16px;font-family:Times">
464<div style="position:absolute;top:2494;left:729">vii</div>
465</span></font>
466<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
467<div style="position:absolute;top:2551;left:270">Code Coverage</div>
468<div style="position:absolute;top:2551;left:720">132</div>
469</span></font>
470<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
471<div style="position:absolute;top:2570;left:288">A Coverage Example</div>
472</span></font>
473<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
474<div style="position:absolute;top:2569;left:720">133</div>
475
476</span></font>
477<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
478<div style="position:absolute;top:2587;left:288">Coverage Metrics</div>
479</span></font>
480<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
481<div style="position:absolute;top:2586;left:720">134</div>
482</span></font>
483<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
484<div style="position:absolute;top:2603;left:288">Coverage Tools</div>
485</span></font>
486<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
487<div style="position:absolute;top:2602;left:720">136</div>
488</span></font>
489
490<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
491<div style="position:absolute;top:2620;left:288">Implementation</div>
492</span></font>
493<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
494<div style="position:absolute;top:2619;left:720">146</div>
495</span></font>
496<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
497<div style="position:absolute;top:2636;left:288">Beware!</div>
498</span></font>
499<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
500<div style="position:absolute;top:2635;left:720">147</div>
501</span></font>
502<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
503
504<div style="position:absolute;top:2653;left:288">A Guide to Successful Coverage</div>
505</span></font>
506<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
507<div style="position:absolute;top:2652;left:720">147</div>
508<div style="position:absolute;top:2669;left:270">Conclusion</div>
509<div style="position:absolute;top:2669;left:720">150</div>
510</span></font>
511<font size="8" face="Times"><span style="font-size:16px;font-family:Times">
512<div style="position:absolute;top:2716;left:162">Chapter 3</div>
513<div style="position:absolute;top:2716;left:270">Enterprise Testing</div>
514<div style="position:absolute;top:2716;left:715">153</div>
515
516</span></font>
517<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
518<div style="position:absolute;top:2745;left:270">A Typical Enterprise Scenario</div>
519<div style="position:absolute;top:2745;left:720">154</div>
520</span></font>
521<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
522<div style="position:absolute;top:2764;left:288">Participants</div>
523</span></font>
524<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
525<div style="position:absolute;top:2763;left:720">155</div>
526</span></font>
527<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
528<div style="position:absolute;top:2781;left:288">Testing Methodology</div>
529
530</span></font>
531<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
532<div style="position:absolute;top:2780;left:720">155</div>
533</span></font>
534<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
535<div style="position:absolute;top:2797;left:288">Issues with the Current Approach</div>
536</span></font>
537<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
538<div style="position:absolute;top:2796;left:720">156</div>
539<div style="position:absolute;top:2814;left:270">A Concrete Example</div>
540<div style="position:absolute;top:2814;left:720">157</div>
541</span></font>
542
543<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
544<div style="position:absolute;top:2833;left:288">Goals</div>
545</span></font>
546<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
547<div style="position:absolute;top:2832;left:720">159</div>
548</span></font>
549<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
550<div style="position:absolute;top:2850;left:288">Nongoals</div>
551</span></font>
552<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
553<div style="position:absolute;top:2849;left:720">160</div>
554<div style="position:absolute;top:2866;left:270">Test Implementation</div>
555
556<div style="position:absolute;top:2866;left:720">160</div>
557</span></font>
558<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
559<div style="position:absolute;top:2886;left:288">Testing for Success</div>
560</span></font>
561<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
562<div style="position:absolute;top:2885;left:720">161</div>
563</span></font>
564<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
565<div style="position:absolute;top:2903;left:288">Building Test Data</div>
566</span></font>
567<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
568<div style="position:absolute;top:2901;left:720">163</div>
569
570</span></font>
571<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
572<div style="position:absolute;top:2919;left:288">Test Setup Issues</div>
573</span></font>
574<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
575<div style="position:absolute;top:2918;left:720">166</div>
576</span></font>
577<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
578<div style="position:absolute;top:2935;left:288">Error Handling</div>
579</span></font>
580<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
581<div style="position:absolute;top:2934;left:720">172</div>
582</span></font>
583
584<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
585<div style="position:absolute;top:2952;left:288">Emerging Unit Tests</div>
586</span></font>
587<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
588<div style="position:absolute;top:2951;left:720">175</div>
589</span></font>
590<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
591<div style="position:absolute;top:2968;left:288">Coping with In-Container Components</div>
592</span></font>
593<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
594<div style="position:absolute;top:2967;left:720">177</div>
595</span></font>
596<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
597
598<div style="position:absolute;top:2985;left:288">Putting It All Together</div>
599</span></font>
600<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
601<div style="position:absolute;top:2984;left:720">178</div>
602<div style="position:absolute;top:3001;left:270">Exploring the Competing Consumers Pattern</div>
603<div style="position:absolute;top:3001;left:720">182</div>
604</span></font>
605<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
606<div style="position:absolute;top:3021;left:288">The Pattern</div>
607</span></font>
608<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
609<div style="position:absolute;top:3020;left:720">182</div>
610
611</span></font>
612<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
613<div style="position:absolute;top:3038;left:288">The Test</div>
614</span></font>
615<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
616<div style="position:absolute;top:3036;left:720">184</div>
617<div style="position:absolute;top:3054;left:270">The Role of Refactoring</div>
618<div style="position:absolute;top:3054;left:720">186</div>
619</span></font>
620<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
621<div style="position:absolute;top:3074;left:288">A Concrete Example</div>
622</span></font>
623
624<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
625<div style="position:absolute;top:3072;left:720">187</div>
626</span></font>
627<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
628<div style="position:absolute;top:3090;left:288">An In-Container Approach</div>
629</span></font>
630<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
631<div style="position:absolute;top:3089;left:720">193</div>
632<div style="position:absolute;top:3106;left:270">Conclusion</div>
633<div style="position:absolute;top:3106;left:720">194</div>
634</span></font>
635<font size="8" face="Times"><span style="font-size:16px;font-family:Times">
636
637<div style="position:absolute;top:3153;left:162">Chapter 4</div>
638<div style="position:absolute;top:3153;left:270">Java EE Testing</div>
639<div style="position:absolute;top:3153;left:715">197</div>
640</span></font>
641<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
642<div style="position:absolute;top:3182;left:270">In-Container versus Out-of-Container Testing</div>
643<div style="position:absolute;top:3182;left:720">198</div>
644<div style="position:absolute;top:3202;left:270">In-Container Testing</div>
645<div style="position:absolute;top:3202;left:720">200</div>
646</span></font>
647
648<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
649<div style="position:absolute;top:3221;left:288">Creating a Test Environment</div>
650</span></font>
651<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
652<div style="position:absolute;top:3220;left:720">200</div>
653</span></font>
654<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
655<div style="position:absolute;top:3238;left:288">Identifying Tests</div>
656</span></font>
657<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
658<div style="position:absolute;top:3237;left:720">201</div>
659</span></font>
660<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
661
662<div style="position:absolute;top:3254;left:288">Registering Tests</div>
663</span></font>
664<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
665<div style="position:absolute;top:3253;left:720">203</div>
666</span></font>
667<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
668<div style="position:absolute;top:3271;left:288">Registering a Results Listener</div>
669</span></font>
670<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
671<div style="position:absolute;top:3270;left:720">204</div>
672<div style="position:absolute;top:3287;left:270">Java Naming and Directory Interface (JNDI)</div>
673<div style="position:absolute;top:3287;left:720">207</div>
674
675</span></font>
676<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
677<div style="position:absolute;top:3307;left:288">Understanding JNDI\u2019s Bootstrapping</div>
678</span></font>
679<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
680<div style="position:absolute;top:3306;left:720">207</div>
681</span></font>
682<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
683<div style="position:absolute;top:3323;left:288">Spring\u2019s <b>SimpleNamingContextBuilder</b></div>
684</span></font>
685<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
686<div style="position:absolute;top:3322;left:720">209</div>
687
688</span></font>
689<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
690<div style="position:absolute;top:3340;left:288">Avoiding JNDI</div>
691</span></font>
692<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
693<div style="position:absolute;top:3339;left:720">210</div>
694</span></font>
695<font size="2" face="Times"><span style="font-size:8px;font-family:Times">
696<div style="position:absolute;top:2416;left:90">Beust.book  Page vii  Thursday, August 16, 2007  10:22 AM</div>
697</span></font>
698
699<div style="position:absolute;top:3496;left:0"><hr><table border="0" width="100%"><tr><td bgcolor="eeeeee" align="right"><font face="arial,sans-serif"><a name="0.1_4"><b>Page 4</b></a></font></td></tr></table></div><font size="8" face="Times"><span style="font-size:16px;font-family:Times">
700<div style="position:absolute;top:3601;left:117">viii</div>
701
702</span></font>
703<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
704<div style="position:absolute;top:3604;left:189">Contents</div>
705</span></font>
706<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
707<div style="position:absolute;top:3658;left:225">Java Database Connectivity (JDBC)</div>
708<div style="position:absolute;top:3658;left:675">210</div>
709</span></font>
710<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
711<div style="position:absolute;top:3677;left:243">c3p0</div>
712</span></font>
713<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
714<div style="position:absolute;top:3676;left:675">212</div>
715
716</span></font>
717<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
718<div style="position:absolute;top:3694;left:243">Commons DBCP</div>
719</span></font>
720<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
721<div style="position:absolute;top:3693;left:675">213</div>
722</span></font>
723<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
724<div style="position:absolute;top:3710;left:243">Spring</div>
725</span></font>
726<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
727<div style="position:absolute;top:3709;left:675">213</div>
728<div style="position:absolute;top:3727;left:225">Java Transaction API (JTA)</div>
729
730<div style="position:absolute;top:3727;left:675">215</div>
731</span></font>
732<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
733<div style="position:absolute;top:3746;left:243">Java Open Transaction Manager (JOTM)</div>
734</span></font>
735<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
736<div style="position:absolute;top:3745;left:675">217</div>
737</span></font>
738<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
739<div style="position:absolute;top:3763;left:243">Atomikos TransactionEssentials </div>
740</span></font>
741<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
742<div style="position:absolute;top:3762;left:675">218</div>
743
744<div style="position:absolute;top:3779;left:225">Java Messaging Service (JMS)</div>
745<div style="position:absolute;top:3779;left:675">219</div>
746</span></font>
747<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
748<div style="position:absolute;top:3799;left:243">Creating a Sender/Receiver Test</div>
749</span></font>
750<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
751<div style="position:absolute;top:3798;left:675">219</div>
752</span></font>
753<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
754<div style="position:absolute;top:3815;left:243">Using ActiveMQ for Tests</div>
755</span></font>
756
757<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
758<div style="position:absolute;top:3814;left:675">221</div>
759<div style="position:absolute;top:3832;left:225">Java Persistence API (JPA)</div>
760<div style="position:absolute;top:3832;left:675">225</div>
761</span></font>
762<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
763<div style="position:absolute;top:3851;left:243">Configuring the Database</div>
764</span></font>
765<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
766<div style="position:absolute;top:3850;left:675">227</div>
767</span></font>
768<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
769
770<div style="position:absolute;top:3868;left:243">Configuring the JPA Provider</div>
771</span></font>
772<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
773<div style="position:absolute;top:3867;left:675">227</div>
774</span></font>
775<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
776<div style="position:absolute;top:3884;left:243">Writing the Test</div>
777</span></font>
778<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
779<div style="position:absolute;top:3883;left:675">229</div>
780</span></font>
781<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
782<div style="position:absolute;top:3901;left:243">Simulating a Container</div>
783
784</span></font>
785<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
786<div style="position:absolute;top:3900;left:675">230</div>
787</span></font>
788<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
789<div style="position:absolute;top:3917;left:243">Using Spring as the Container</div>
790</span></font>
791<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
792<div style="position:absolute;top:3916;left:675">231</div>
793<div style="position:absolute;top:3934;left:225">Enterprise Java Beans 3.0 (EJB3)</div>
794<div style="position:absolute;top:3934;left:675">236</div>
795</span></font>
796
797<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
798<div style="position:absolute;top:3953;left:243">Message-Driven Beans</div>
799</span></font>
800<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
801<div style="position:absolute;top:3952;left:675">237</div>
802</span></font>
803<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
804<div style="position:absolute;top:3970;left:243">Session Beans</div>
805</span></font>
806<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
807<div style="position:absolute;top:3969;left:675">240</div>
808</span></font>
809<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
810
811<div style="position:absolute;top:3986;left:243">Another Spring Container</div>
812</span></font>
813<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
814<div style="position:absolute;top:3985;left:675">243</div>
815</span></font>
816<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
817<div style="position:absolute;top:4003;left:243">Disadvantages of a Full Container</div>
818</span></font>
819<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
820<div style="position:absolute;top:4002;left:675">244</div>
821<div style="position:absolute;top:4019;left:225">Java API for XML Web Services (JAX-WS)</div>
822<div style="position:absolute;top:4019;left:675">246</div>
823
824</span></font>
825<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
826<div style="position:absolute;top:4039;left:243">Recording Requests</div>
827</span></font>
828<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
829<div style="position:absolute;top:4038;left:675">248</div>
830</span></font>
831<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
832<div style="position:absolute;top:4055;left:243">Setting Up the Test Environment</div>
833</span></font>
834<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
835<div style="position:absolute;top:4054;left:675">248</div>
836</span></font>
837
838<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
839<div style="position:absolute;top:4072;left:243">Creating the Service Test</div>
840</span></font>
841<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
842<div style="position:absolute;top:4071;left:675">251</div>
843</span></font>
844<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
845<div style="position:absolute;top:4088;left:243">XPath Testing</div>
846</span></font>
847<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
848<div style="position:absolute;top:4087;left:675">253</div>
849</span></font>
850<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
851
852<div style="position:absolute;top:4105;left:243">Testing Remote Services</div>
853</span></font>
854<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
855<div style="position:absolute;top:4104;left:675">254</div>
856<div style="position:absolute;top:4121;left:225">Servlets</div>
857<div style="position:absolute;top:4121;left:675">255</div>
858</span></font>
859<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
860<div style="position:absolute;top:4141;left:243">In-Container Testing</div>
861</span></font>
862<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
863<div style="position:absolute;top:4140;left:675">255</div>
864
865</span></font>
866<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
867<div style="position:absolute;top:4157;left:243">Mock/Stub Objects</div>
868</span></font>
869<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
870<div style="position:absolute;top:4156;left:675">255</div>
871</span></font>
872<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
873<div style="position:absolute;top:4174;left:243">Refactoring</div>
874</span></font>
875<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
876<div style="position:absolute;top:4173;left:675">257</div>
877</span></font>
878
879<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
880<div style="position:absolute;top:4190;left:243">Embedded Container</div>
881</span></font>
882<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
883<div style="position:absolute;top:4189;left:675">257</div>
884</span></font>
885<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
886<div style="position:absolute;top:4207;left:243">In-Memory Invocation</div>
887</span></font>
888<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
889<div style="position:absolute;top:4206;left:675">260</div>
890<div style="position:absolute;top:4223;left:225">XML</div>
891
892<div style="position:absolute;top:4223;left:675">262</div>
893</span></font>
894<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
895<div style="position:absolute;top:4243;left:243">Using dom4j</div>
896</span></font>
897<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
898<div style="position:absolute;top:4242;left:675">263</div>
899</span></font>
900<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
901<div style="position:absolute;top:4259;left:243">Using XMLUnit</div>
902</span></font>
903<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
904<div style="position:absolute;top:4258;left:675">264</div>
905
906<div style="position:absolute;top:4276;left:225">Conclusion</div>
907<div style="position:absolute;top:4276;left:675">266</div>
908</span></font>
909<font size="8" face="Times"><span style="font-size:16px;font-family:Times">
910<div style="position:absolute;top:4322;left:117">Chapter 5</div>
911<div style="position:absolute;top:4322;left:225">Integration</div>
912<div style="position:absolute;top:4322;left:670">269</div>
913</span></font>
914<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
915<div style="position:absolute;top:4351;left:225">Spring</div>
916<div style="position:absolute;top:4351;left:675">270</div>
917
918</span></font>
919<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
920<div style="position:absolute;top:4371;left:243">Spring\u2019s Test Package Features</div>
921</span></font>
922<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
923<div style="position:absolute;top:4370;left:675">271</div>
924</span></font>
925<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
926<div style="position:absolute;top:4388;left:243">Test Class Hierarchy</div>
927</span></font>
928<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
929<div style="position:absolute;top:4386;left:675">272</div>
930<div style="position:absolute;top:4404;left:225">Guice</div>
931
932<div style="position:absolute;top:4404;left:675">280</div>
933</span></font>
934<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
935<div style="position:absolute;top:4424;left:243">The Issue with Spring</div>
936</span></font>
937<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
938<div style="position:absolute;top:4422;left:675">280</div>
939</span></font>
940<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
941<div style="position:absolute;top:4440;left:243">Enter Guice</div>
942</span></font>
943<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
944<div style="position:absolute;top:4439;left:675">281</div>
945
946</span></font>
947<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
948<div style="position:absolute;top:4456;left:243">A Typical Dependency Scenario</div>
949</span></font>
950<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
951<div style="position:absolute;top:4455;left:675">282</div>
952</span></font>
953<font size="2" face="Times"><span style="font-size:8px;font-family:Times">
954<div style="position:absolute;top:3523;left:90">Beust.book  Page viii  Thursday, August 16, 2007  10:22 AM</div>
955</span></font>
956
957<div style="position:absolute;top:4603;left:0"><hr><table border="0" width="100%"><tr><td bgcolor="eeeeee" align="right"><font face="arial,sans-serif"><a name="0.1_5"><b>Page 5</b></a></font></td></tr></table></div><font size="8" face="Times"><span style="font-size:11px;font-family:Times">
958<div style="position:absolute;top:4711;left:620">Contents</div>
959
960</span></font>
961<font size="8" face="Times"><span style="font-size:16px;font-family:Times">
962<div style="position:absolute;top:4708;left:733">ix</div>
963</span></font>
964<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
965<div style="position:absolute;top:4765;left:288">The Object Factory</div>
966</span></font>
967<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
968<div style="position:absolute;top:4764;left:720">284</div>
969</span></font>
970<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
971<div style="position:absolute;top:4781;left:288">Guice Configuration</div>
972</span></font>
973
974<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
975<div style="position:absolute;top:4780;left:720">286</div>
976</span></font>
977<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
978<div style="position:absolute;top:4798;left:288">Guice-Based Test</div>
979</span></font>
980<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
981<div style="position:absolute;top:4797;left:720">290</div>
982</span></font>
983<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
984<div style="position:absolute;top:4814;left:288">Grouping Test Dependencies</div>
985</span></font>
986<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
987
988<div style="position:absolute;top:4813;left:720">291</div>
989</span></font>
990<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
991<div style="position:absolute;top:4831;left:288">Injecting Configuration</div>
992</span></font>
993<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
994<div style="position:absolute;top:4830;left:720">293</div>
995<div style="position:absolute;top:4847;left:270">DbUnit</div>
996<div style="position:absolute;top:4847;left:720">295</div>
997</span></font>
998<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
999<div style="position:absolute;top:4867;left:288">Configuration</div>
1000
1001</span></font>
1002<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
1003<div style="position:absolute;top:4866;left:720">295</div>
1004</span></font>
1005<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
1006<div style="position:absolute;top:4883;left:288">Usage</div>
1007</span></font>
1008<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
1009<div style="position:absolute;top:4882;left:720">297</div>
1010</span></font>
1011<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
1012<div style="position:absolute;top:4900;left:288">Verifying Results</div>
1013</span></font>
1014
1015<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
1016<div style="position:absolute;top:4899;left:720">299</div>
1017<div style="position:absolute;top:4916;left:270">HtmlUnit</div>
1018<div style="position:absolute;top:4916;left:720">303</div>
1019</span></font>
1020<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
1021<div style="position:absolute;top:4936;left:288">Configuration</div>
1022</span></font>
1023<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
1024<div style="position:absolute;top:4935;left:720">304</div>
1025</span></font>
1026<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
1027
1028<div style="position:absolute;top:4952;left:288">Usage</div>
1029</span></font>
1030<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
1031<div style="position:absolute;top:4951;left:720">305</div>
1032<div style="position:absolute;top:4969;left:270">Selenium</div>
1033<div style="position:absolute;top:4969;left:720">310</div>
1034<div style="position:absolute;top:4988;left:270">Swing UI Testing</div>
1035<div style="position:absolute;top:4988;left:720">312</div>
1036</span></font>
1037<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
1038<div style="position:absolute;top:5008;left:288">Testing Approach</div>
1039
1040</span></font>
1041<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
1042<div style="position:absolute;top:5007;left:720">312</div>
1043</span></font>
1044<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
1045<div style="position:absolute;top:5024;left:288">Configuration</div>
1046</span></font>
1047<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
1048<div style="position:absolute;top:5023;left:720">313</div>
1049</span></font>
1050<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
1051<div style="position:absolute;top:5041;left:288">Usage</div>
1052</span></font>
1053
1054<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
1055<div style="position:absolute;top:5040;left:720">314</div>
1056<div style="position:absolute;top:5057;left:270">Tests for Painting Code</div>
1057<div style="position:absolute;top:5057;left:720">316</div>
1058<div style="position:absolute;top:5077;left:270">Continuous Integration</div>
1059<div style="position:absolute;top:5077;left:720">320</div>
1060</span></font>
1061<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
1062<div style="position:absolute;top:5096;left:288">Why Bother?</div>
1063</span></font>
1064<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
1065
1066<div style="position:absolute;top:5095;left:720">320</div>
1067</span></font>
1068<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
1069<div style="position:absolute;top:5113;left:288">CI Server Features</div>
1070</span></font>
1071<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
1072<div style="position:absolute;top:5112;left:720">320</div>
1073</span></font>
1074<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
1075<div style="position:absolute;top:5129;left:288">TestNG Integration</div>
1076</span></font>
1077<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
1078<div style="position:absolute;top:5128;left:720">321</div>
1079
1080<div style="position:absolute;top:5146;left:270">Conclusion</div>
1081<div style="position:absolute;top:5146;left:720">322</div>
1082</span></font>
1083<font size="8" face="Times"><span style="font-size:16px;font-family:Times">
1084<div style="position:absolute;top:5192;left:162">Chapter 6</div>
1085<div style="position:absolute;top:5192;left:270">Extending TestNG</div>
1086<div style="position:absolute;top:5192;left:715">325</div>
1087</span></font>
1088<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
1089<div style="position:absolute;top:5221;left:270">The TestNG API</div>
1090<div style="position:absolute;top:5221;left:720">325</div>
1091
1092</span></font>
1093<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
1094<div style="position:absolute;top:5242;left:288"><b>org.testng.TestNG</b>, <b>ITestResult</b>, <b>ITestListener</b>, </div>
1095<div style="position:absolute;top:5258;left:306"><b>ITestNGMethod</b></div>
1096</span></font>
1097<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
1098<div style="position:absolute;top:5256;left:720">325</div>
1099</span></font>
1100<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
1101
1102<div style="position:absolute;top:5274;left:288">A Concrete Example</div>
1103</span></font>
1104<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
1105<div style="position:absolute;top:5273;left:720">328</div>
1106</span></font>
1107<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
1108<div style="position:absolute;top:5290;left:288">The XML API</div>
1109</span></font>
1110<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
1111<div style="position:absolute;top:5289;left:720">331</div>
1112</span></font>
1113<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
1114<div style="position:absolute;top:5307;left:288">Synthetic XML Files</div>
1115
1116</span></font>
1117<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
1118<div style="position:absolute;top:5306;left:720">333</div>
1119<div style="position:absolute;top:5323;left:270">BeanShell</div>
1120<div style="position:absolute;top:5323;left:720">335</div>
1121</span></font>
1122<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
1123<div style="position:absolute;top:5343;left:288">BeanShell Overview</div>
1124</span></font>
1125<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
1126<div style="position:absolute;top:5342;left:720">335</div>
1127</span></font>
1128
1129<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
1130<div style="position:absolute;top:5360;left:288">TestNG and BeanShell</div>
1131</span></font>
1132<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
1133<div style="position:absolute;top:5358;left:720">337</div>
1134</span></font>
1135<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
1136<div style="position:absolute;top:5376;left:288">Interactive Execution</div>
1137</span></font>
1138<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
1139<div style="position:absolute;top:5375;left:720">339</div>
1140<div style="position:absolute;top:5392;left:270">Method Selectors</div>
1141
1142<div style="position:absolute;top:5392;left:720">341</div>
1143<div style="position:absolute;top:5412;left:270">Annotation Transformers</div>
1144<div style="position:absolute;top:5412;left:720">346</div>
1145</span></font>
1146<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
1147<div style="position:absolute;top:5432;left:288">Annotation History</div>
1148</span></font>
1149<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
1150<div style="position:absolute;top:5430;left:720">346</div>
1151</span></font>
1152<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
1153<div style="position:absolute;top:5448;left:288">Pros and Cons</div>
1154
1155</span></font>
1156<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
1157<div style="position:absolute;top:5447;left:720">348</div>
1158</span></font>
1159<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
1160<div style="position:absolute;top:5464;left:288">Using TestNG Annotation Transformers</div>
1161</span></font>
1162<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
1163<div style="position:absolute;top:5463;left:720">348</div>
1164</span></font>
1165<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
1166<div style="position:absolute;top:5481;left:288">Possible Uses of Annotation Transformers</div>
1167</span></font>
1168
1169<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
1170<div style="position:absolute;top:5480;left:720">353</div>
1171<div style="position:absolute;top:5497;left:270">Reports</div>
1172<div style="position:absolute;top:5497;left:720">355</div>
1173</span></font>
1174<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
1175<div style="position:absolute;top:5517;left:288">Default Reports</div>
1176</span></font>
1177<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
1178<div style="position:absolute;top:5516;left:720">355</div>
1179</span></font>
1180<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
1181
1182<div style="position:absolute;top:5534;left:288">The Reporter API</div>
1183</span></font>
1184<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
1185<div style="position:absolute;top:5533;left:720">360</div>
1186</span></font>
1187<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
1188<div style="position:absolute;top:5550;left:288">The Report Plug-in API</div>
1189</span></font>
1190<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
1191<div style="position:absolute;top:5549;left:720">360</div>
1192</span></font>
1193<font size="2" face="Times"><span style="font-size:8px;font-family:Times">
1194<div style="position:absolute;top:4630;left:90">Beust.book  Page ix  Thursday, August 16, 2007  10:22 AM</div>
1195
1196</span></font>
1197
1198<div style="position:absolute;top:5710;left:0"><hr><table border="0" width="100%"><tr><td bgcolor="eeeeee" align="right"><font face="arial,sans-serif"><a name="0.1_6"><b>Page 6</b></a></font></td></tr></table></div><font size="8" face="Times"><span style="font-size:16px;font-family:Times">
1199<div style="position:absolute;top:5815;left:117">x</div>
1200</span></font>
1201<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
1202<div style="position:absolute;top:5818;left:189">Contents</div>
1203</span></font>
1204<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
1205<div style="position:absolute;top:5872;left:225">Writing Custom Annotations</div>
1206<div style="position:absolute;top:5872;left:675">366</div>
1207</span></font>
1208
1209<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
1210<div style="position:absolute;top:5891;left:243">Implementation</div>
1211</span></font>
1212<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
1213<div style="position:absolute;top:5890;left:675">367</div>
1214</span></font>
1215<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
1216<div style="position:absolute;top:5908;left:243">Testing</div>
1217</span></font>
1218<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
1219<div style="position:absolute;top:5907;left:675">371</div>
1220<div style="position:absolute;top:5924;left:225">Conclusion</div>
1221
1222<div style="position:absolute;top:5924;left:675">375</div>
1223</span></font>
1224<font size="8" face="Times"><span style="font-size:16px;font-family:Times">
1225<div style="position:absolute;top:5971;left:117">Chapter 7</div>
1226<div style="position:absolute;top:5971;left:225">Digressions</div>
1227<div style="position:absolute;top:5971;left:670">377</div>
1228</span></font>
1229<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
1230<div style="position:absolute;top:6000;left:225">Motivation</div>
1231<div style="position:absolute;top:6000;left:675">377</div>
1232<div style="position:absolute;top:6019;left:225">The TestNG Philosophy</div>
1233
1234<div style="position:absolute;top:6019;left:675">378</div>
1235<div style="position:absolute;top:6039;left:225">The Care and Feeding of Exceptions</div>
1236<div style="position:absolute;top:6039;left:675">378</div>
1237<div style="position:absolute;top:6058;left:225">Stateful Tests</div>
1238<div style="position:absolute;top:6058;left:675">382</div>
1239</span></font>
1240<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
1241<div style="position:absolute;top:6078;left:243">Immutable State</div>
1242</span></font>
1243<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
1244<div style="position:absolute;top:6077;left:675">382</div>
1245
1246</span></font>
1247<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
1248<div style="position:absolute;top:6094;left:243">Mutable State</div>
1249</span></font>
1250<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
1251<div style="position:absolute;top:6093;left:675">383</div>
1252<div style="position:absolute;top:6111;left:225">The Pitfalls of Test-Driven Development</div>
1253<div style="position:absolute;top:6111;left:675">385</div>
1254</span></font>
1255<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
1256<div style="position:absolute;top:6130;left:243">TDD Promotes Microdesign over Macrodesign</div>
1257</span></font>
1258
1259<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
1260<div style="position:absolute;top:6129;left:675">385</div>
1261</span></font>
1262<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
1263<div style="position:absolute;top:6147;left:243">TDD Is Hard to Apply</div>
1264</span></font>
1265<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
1266<div style="position:absolute;top:6146;left:675">386</div>
1267</span></font>
1268<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
1269<div style="position:absolute;top:6163;left:243">Extracting the Good from Test-Driven Development</div>
1270</span></font>
1271<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
1272
1273<div style="position:absolute;top:6162;left:675">388</div>
1274<div style="position:absolute;top:6180;left:225">Testing Private Methods</div>
1275<div style="position:absolute;top:6180;left:675">388</div>
1276<div style="position:absolute;top:6199;left:225">Testing versus Encapsulation</div>
1277<div style="position:absolute;top:6199;left:675">391</div>
1278<div style="position:absolute;top:6219;left:225">The Power of Debuggers</div>
1279<div style="position:absolute;top:6219;left:675">392</div>
1280<div style="position:absolute;top:6238;left:225">Logging Best Practices</div>
1281<div style="position:absolute;top:6238;left:675">394</div>
1282
1283<div style="position:absolute;top:6258;left:225">The Value of Time</div>
1284<div style="position:absolute;top:6258;left:675">397</div>
1285<div style="position:absolute;top:6277;left:225">Conclusion</div>
1286<div style="position:absolute;top:6277;left:675">399</div>
1287</span></font>
1288<font size="8" face="Times"><span style="font-size:16px;font-family:Times">
1289<div style="position:absolute;top:6324;left:117">Appendix A IDE Integration</div>
1290<div style="position:absolute;top:6324;left:670">401</div>
1291</span></font>
1292<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
1293<div style="position:absolute;top:6353;left:225">Eclipse</div>
1294
1295<div style="position:absolute;top:6353;left:675">401</div>
1296</span></font>
1297<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
1298<div style="position:absolute;top:6373;left:243">Installing the Plug-in</div>
1299</span></font>
1300<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
1301<div style="position:absolute;top:6372;left:675">401</div>
1302</span></font>
1303<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
1304<div style="position:absolute;top:6389;left:243">Verifying the Installation</div>
1305</span></font>
1306<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
1307<div style="position:absolute;top:6388;left:675">404</div>
1308
1309</span></font>
1310<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
1311<div style="position:absolute;top:6406;left:243">Creating a Launch Configuration</div>
1312</span></font>
1313<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
1314<div style="position:absolute;top:6405;left:675">404</div>
1315</span></font>
1316<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
1317<div style="position:absolute;top:6422;left:243">Configuring Preferences</div>
1318</span></font>
1319<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
1320<div style="position:absolute;top:6421;left:675">410</div>
1321</span></font>
1322
1323<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
1324<div style="position:absolute;top:6439;left:243">Converting JUnit Tests</div>
1325</span></font>
1326<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
1327<div style="position:absolute;top:6438;left:675">410</div>
1328<div style="position:absolute;top:6455;left:225">IntelliJ IDEA</div>
1329<div style="position:absolute;top:6455;left:675">411</div>
1330</span></font>
1331<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
1332<div style="position:absolute;top:6475;left:243">Installing the Plug-in</div>
1333</span></font>
1334<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
1335
1336<div style="position:absolute;top:6474;left:675">411</div>
1337</span></font>
1338<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
1339<div style="position:absolute;top:6491;left:243">Running Tests</div>
1340</span></font>
1341<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
1342<div style="position:absolute;top:6490;left:675">412</div>
1343</span></font>
1344<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
1345<div style="position:absolute;top:6508;left:243">Running Shortcuts</div>
1346</span></font>
1347<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
1348<div style="position:absolute;top:6507;left:675">417</div>
1349
1350</span></font>
1351<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
1352<div style="position:absolute;top:6524;left:243">Viewing Test Results</div>
1353</span></font>
1354<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
1355<div style="position:absolute;top:6523;left:675">418</div>
1356</span></font>
1357<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
1358<div style="position:absolute;top:6541;left:243">Running Plug-in Refactorings</div>
1359</span></font>
1360<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
1361<div style="position:absolute;top:6540;left:675">419</div>
1362</span></font>
1363
1364<font size="8" face="Times"><span style="font-size:16px;font-family:Times">
1365<div style="position:absolute;top:6584;left:117">Appendix B TestNG Javadocs</div>
1366<div style="position:absolute;top:6584;left:670">421</div>
1367</span></font>
1368<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
1369<div style="position:absolute;top:6613;left:225">JDK 1.4 and JDK 5</div>
1370<div style="position:absolute;top:6613;left:675">421</div>
1371<div style="position:absolute;top:6633;left:225">Shortcut Syntax for JDK 5 Annotations</div>
1372<div style="position:absolute;top:6633;left:675">423</div>
1373</span></font>
1374<font size="2" face="Times"><span style="font-size:8px;font-family:Times">
1375
1376<div style="position:absolute;top:5737;left:90">Beust.book  Page x  Thursday, August 16, 2007  10:22 AM</div>
1377</span></font>
1378
1379<div style="position:absolute;top:6817;left:0"><hr><table border="0" width="100%"><tr><td bgcolor="eeeeee" align="right"><font face="arial,sans-serif"><a name="0.1_7"><b>Page 7</b></a></font></td></tr></table></div><font size="8" face="Times"><span style="font-size:11px;font-family:Times">
1380<div style="position:absolute;top:6925;left:620">Contents</div>
1381</span></font>
1382<font size="8" face="Times"><span style="font-size:16px;font-family:Times">
1383<div style="position:absolute;top:6922;left:733">xi</div>
1384</span></font>
1385<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
1386<div style="position:absolute;top:6979;left:270">Annotation Javadocs</div>
1387<div style="position:absolute;top:6979;left:720">423</div>
1388
1389</span></font>
1390<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
1391<div style="position:absolute;top:6999;left:288"><b>@<a href="mailto:DataProvider/@testng.data-provider" target="_blank">DataProvider/@testng.data<WBR>-provider</a></b></div>
1392</span></font>
1393<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
1394<div style="position:absolute;top:6997;left:720">425</div>
1395</span></font>
1396<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
1397<div style="position:absolute;top:7015;left:288"><b>@<a href="mailto:Factory/@testng.factory" target="_blank">Factory/@testng.factory</a></b></div>
1398</span></font>
1399<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
1400
1401<div style="position:absolute;top:7014;left:720">426</div>
1402</span></font>
1403<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
1404<div style="position:absolute;top:7032;left:288"><b>@<a href="mailto:Parameters/@testng.parameters" target="_blank">Parameters/@testng.parameters</a></b></div>
1405</span></font>
1406<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
1407<div style="position:absolute;top:7030;left:720">426</div>
1408</span></font>
1409<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
1410<div style="position:absolute;top:7048;left:288"><b>@<a href="mailto:Test/@testng.test" target="_blank">Test/@testng.test</a></b></div>
1411</span></font>
1412
1413<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
1414<div style="position:absolute;top:7047;left:720">427</div>
1415<div style="position:absolute;top:7064;left:270">The </div>
1416</span></font>
1417<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
1418<div style="position:absolute;top:7066;left:298"><b>org.testng.TestNG</b></div>
1419</span></font>
1420<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
1421<div style="position:absolute;top:7064;left:441">Class</div>
1422<div style="position:absolute;top:7064;left:720">428</div>
1423<div style="position:absolute;top:7084;left:270">The XML API</div>
1424
1425<div style="position:absolute;top:7084;left:720">432</div>
1426</span></font>
1427<font size="8" face="Times"><span style="font-size:16px;font-family:Times">
1428<div style="position:absolute;top:7130;left:162">Appendix C <b>testng.xml</b></div>
1429<div style="position:absolute;top:7131;left:715"><b>435</b></div>
1430</span></font>
1431<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
1432<div style="position:absolute;top:7159;left:270">Overview</div>
1433<div style="position:absolute;top:7159;left:720">436</div>
1434<div style="position:absolute;top:7179;left:270">Scopes</div>
1435
1436<div style="position:absolute;top:7179;left:720">437</div>
1437<div style="position:absolute;top:7198;left:270">XML Tags</div>
1438<div style="position:absolute;top:7198;left:720">437</div>
1439</span></font>
1440<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
1441<div style="position:absolute;top:7219;left:288"><b>&lt;suite&gt;</b></div>
1442</span></font>
1443<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
1444<div style="position:absolute;top:7217;left:720">437</div>
1445</span></font>
1446<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
1447<div style="position:absolute;top:7235;left:288"><b>&lt;packages&gt; </b>and <b>&lt;package&gt;</b></div>
1448
1449</span></font>
1450<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
1451<div style="position:absolute;top:7233;left:720">440</div>
1452</span></font>
1453<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
1454<div style="position:absolute;top:7252;left:288"><b>&lt;parameter&gt;</b></div>
1455</span></font>
1456<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
1457<div style="position:absolute;top:7250;left:720">441</div>
1458</span></font>
1459<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
1460<div style="position:absolute;top:7268;left:288"><b>&lt;suite-files&gt; </b>and <b>&lt;suite-file&gt;</b></div>
1461
1462</span></font>
1463<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
1464<div style="position:absolute;top:7266;left:720">442</div>
1465</span></font>
1466<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
1467<div style="position:absolute;top:7285;left:288"><b>&lt;method-selectors&gt;</b>, <b>&lt;method-selector&gt;</b>, </div>
1468<div style="position:absolute;top:7301;left:306"><b>&lt;selector-class&gt;</b>, and <b>&lt;script&gt;</b></div>
1469</span></font>
1470<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
1471
1472<div style="position:absolute;top:7299;left:720">443</div>
1473</span></font>
1474<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
1475<div style="position:absolute;top:7318;left:288"><b>&lt;test&gt;</b></div>
1476</span></font>
1477<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
1478<div style="position:absolute;top:7316;left:720">444</div>
1479</span></font>
1480<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
1481<div style="position:absolute;top:7334;left:288"><b>&lt;groups&gt;</b>, <b>&lt;define&gt;</b>, and <b>&lt;run&gt;</b></div>
1482
1483</span></font>
1484<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
1485<div style="position:absolute;top:7332;left:720">446</div>
1486</span></font>
1487<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
1488<div style="position:absolute;top:7351;left:288"><b>&lt;classes&gt; </b>and <b>&lt;class&gt;</b></div>
1489</span></font>
1490<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
1491<div style="position:absolute;top:7349;left:720">446</div>
1492</span></font>
1493<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
1494
1495<div style="position:absolute;top:7367;left:288"><b>&lt;methods&gt;</b></div>
1496</span></font>
1497<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
1498<div style="position:absolute;top:7365;left:720">447</div>
1499</span></font>
1500<font size="8" face="Times"><span style="font-size:16px;font-family:Times">
1501<div style="position:absolute;top:7410;left:162">Appendix D Migrating from JUnit</div>
1502<div style="position:absolute;top:7410;left:715">449</div>
1503</span></font>
1504<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
1505<div style="position:absolute;top:7441;left:270"><b>JUnitConverter</b></div>
1506</span></font>
1507
1508<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
1509<div style="position:absolute;top:7439;left:720">449</div>
1510</span></font>
1511<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
1512<div style="position:absolute;top:7459;left:288">From the Command Line</div>
1513</span></font>
1514<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
1515<div style="position:absolute;top:7458;left:720">449</div>
1516</span></font>
1517<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
1518<div style="position:absolute;top:7475;left:288">From <b>ant</b></div>
1519</span></font>
1520
1521<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
1522<div style="position:absolute;top:7474;left:720">452</div>
1523<div style="position:absolute;top:7492;left:270">Integrated Development Environments</div>
1524<div style="position:absolute;top:7492;left:720">453</div>
1525</span></font>
1526<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
1527<div style="position:absolute;top:7511;left:288">Eclipse</div>
1528</span></font>
1529<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
1530<div style="position:absolute;top:7510;left:720">453</div>
1531</span></font>
1532<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
1533
1534<div style="position:absolute;top:7528;left:288">IDEA</div>
1535</span></font>
1536<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
1537<div style="position:absolute;top:7527;left:720">454</div>
1538<div style="position:absolute;top:7544;left:270">Incremental Migration and JUnit Mode</div>
1539<div style="position:absolute;top:7544;left:720">455</div>
1540<div style="position:absolute;top:7564;left:270">Converting JUnit Code</div>
1541<div style="position:absolute;top:7564;left:720">456</div>
1542</span></font>
1543<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
1544<div style="position:absolute;top:7583;left:288">Assertions</div>
1545
1546</span></font>
1547<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
1548<div style="position:absolute;top:7582;left:720">457</div>
1549</span></font>
1550<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
1551<div style="position:absolute;top:7600;left:288">Running a Single Test</div>
1552</span></font>
1553<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
1554<div style="position:absolute;top:7599;left:720">458</div>
1555</span></font>
1556<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
1557<div style="position:absolute;top:7616;left:288">Maintaining State between Invocations</div>
1558</span></font>
1559
1560<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
1561<div style="position:absolute;top:7615;left:720">461</div>
1562</span></font>
1563<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
1564<div style="position:absolute;top:7633;left:288">Suite-wide Initialization</div>
1565</span></font>
1566<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
1567<div style="position:absolute;top:7632;left:720">463</div>
1568</span></font>
1569<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
1570<div style="position:absolute;top:7649;left:288">Class-wide Initialization</div>
1571</span></font>
1572<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
1573
1574<div style="position:absolute;top:7648;left:720">463</div>
1575</span></font>
1576<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
1577<div style="position:absolute;top:7666;left:288">The AllTests Pattern</div>
1578</span></font>
1579<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
1580<div style="position:absolute;top:7665;left:720">463</div>
1581</span></font>
1582<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
1583<div style="position:absolute;top:7682;left:288">Testing Exceptions</div>
1584</span></font>
1585<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
1586<div style="position:absolute;top:7681;left:720">467</div>
1587
1588</span></font>
1589<font size="8" face="Times"><span style="font-size:11px;font-family:Times">
1590<div style="position:absolute;top:7699;left:288">The Parameterized Test Case Pattern</div>
1591</span></font>
1592<font size="8" face="Times"><span style="font-size:12px;font-family:Times">
1593<div style="position:absolute;top:7698;left:720">469</div>
1594</span></font>
1595<font size="8" face="Times"><span style="font-size:16px;font-family:Times">
1596<div style="position:absolute;top:7742;left:270">Index</div>
1597<div style="position:absolute;top:7742;left:715">471</div>
1598</span></font>
1599<font size="2" face="Times"><span style="font-size:8px;font-family:Times">
1600<div style="position:absolute;top:6844;left:90">Beust.book  Page xi  Thursday, August 16, 2007  10:22 AM</div>
1601
1602</span></font>
1603
1604<div style="position:absolute;top:7924;left:0"><hr><table border="0" width="100%"><tr><td bgcolor="eeeeee" align="right"><font face="arial,sans-serif"><a name="0.1_8"><b>Page 8</b></a></font></td></tr></table></div><font size="2" face="Times"><span style="font-size:8px;font-family:Times">
1605<div style="position:absolute;top:7951;left:90">Beust.book  Page xii  Thursday, August 16, 2007  10:22 AM</div>
1606</span></font>
1607</div>
1608
1609</div></body></html>
1610