Home | History | Annotate | Download | only in doc
      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/ (a] testng.data-provider" target="_blank">DataProvider/ (a] 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/ (a] testng.factory" target="_blank">Factory/ (a] 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/ (a] testng.parameters" target="_blank">Parameters/ (a] 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/ (a] testng.test" target="_blank">Test/ (a] 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