<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>HttpUnit Manual - Introduction</title> <LINK REL="stylesheet" HREF="manual.css" TYPE="text/css"> </head> <body> <h1>Introduction</h2> <p>Automated unit testing is a great way to ensure that code being maintained works and continues to work. The <A HREF="http://www.XProgramming.com/">Extreme Programming</A> (XP) methodology relies heavily on it, and practitioners have available to them a range of <A HREF="http://www.xprogramming.com/software.htm">unit testing frameworks</A>, which work by making direct calls to the code being tested. But what if you want to test a web application? HttpUnit is a library which makes this possible.</p> <p>HttpUnit works by emulating a browser, handling frames, cookies, redirects, and so on. It lets you view pages as plain text, an XML DOM, or as an aggregation of collection of links, frames, images, and so on. It lets you select an element which should lead to a new page and follow it, so that you can easily handle a chain of web pages.</p> <h2>Test Design and Abstraction</h2> <p>Unlike most commercial tools, HttpUnit does not rely on record and playback. Its API lets you define what you want to see or change, even before the web site is built. This is essential for test-first development. Since the primary use of HttpUnit is to write functional tests, it helps you abstract those elements which are most likely to change. For example, a page might start by providing a small number of options, using a set of radio buttons:</p> <form class="sample"> Select the desired color: <input type="radio" name="color" value="red">Red <input type="radio" name="color" value="green" checked>Green <input type="radio" name="color" value="blue">Blue </form> <p>As the site evolves, the number of options might grow until the UI designer feels that a pull-down menu would be easier to use to send the same values:</p> <form class="sample"> Select the desired color: <select name="color"> <option value="red">Red <option value="green" selected>Green <option value="blue">Blue <option value="yellow">Yellow <option value="magenta">Magenta </select> </form> <p>Further expansion could lead to a free-form textual input:</p> <form class="sample"> Enter the desired color: <input type="text" name="color" value="green"> </form> <p>A tool which focuses on the type of control actually on the page would force the testers to rewrite their tests with each change, even though the functionality of the site is unchanged. HttpUnit focuses on the intent of the entry, and allows tests to be defined in terms of the values to be transmitted. It is aware of the controls being used and ensures that only values which a user could supply will be sent; however, the tester need only focus on the desired value for each test.</p> <hr> <p align="center">Copyright © 2000-2002 Russell Gold. All rights Reserved.</p> </body></html>