Chapter 3. The xUnit Family of Unit Test Frameworks

     

Chapter 3. The xUnit Family of Unit Test Frameworks

Kent Beck published a unit test framework for the Smalltalk language in 1999. The architecture of SmalltalkUnit (or SUnit) represents a sweet spot, an ideal balance between simplicity and utility. Later, Erich Gamma ported SUnit to Java, creating JUnit. JUnit in turn begat CppUnit, NUnit, PyUnit, XMLUnit, and ports to many other languages. A dizzying array of unit test frameworks built on the same model now exists. These frameworks are known as the xUnit family of tools. All are free, open source software.

     

3.1 xUnit Family Members

Some of the most popular xUnit test frameworks are listed next , with brief summaries of their target language and testing domain. This is just a sample of the many xUnit-derived test tools.


JUnit

The reference implementation of xUnit, JUnit is by far the most widely used and extended unit test framework. It is implemented in and used with Java and is covered in Chapter 6 of this book.


CppUnit

The C++ port of JUnit, it closely follows the JUnit model. This is covered in Chapter 7 of this book.


NUnit

The xUnit for .NET. Rather than being a direct port of JUnit, it has a .NET-specific implementation that generally follows the xUnit model. It is written in C# and can be used to test any .NET language, including C#, VB.Net, J#, and Managed C++. It is covered in Chapter 8 of this book.


PyUnit

The Python version of xUnit. It is included as a standard component of Python 2.1, and is covered in Chapter 9 of this book.


SUnit

Also known as SmalltalkUnit, this is the original xUnit, and the basis of the xUnit architecture. It is written in and used with the Smalltalk language.


vbUnit

vbUnit is xUnit for Visual Basic (VB). It is written in VB and supports building unit tests in VB and COM development.


utPLSQL

utPLSQL is xUnit for Oracle's PL/SQL language. It is written in and used with PL/SQL.


MinUnit

A great example of a minimal but functional unit test framework. It is implemented in three lines of C and is used to test C code.

     

3.2 xUnit Extensions

Beyond the xUnits themselves , many add-on tools are available that extend the functionality of existing unit test frameworks into specialized domains, rather than acting as standalone tools. A representative set of popular extensions is listed here.


XMLUnit

An xUnit extension to support XML testing. Versions exist as extensions to both JUnit and NUnit. This is covered in Chapter 10 of this book.


JUnitPerf

A JUnit extension that supports writing code performance and scalability tests. It is written in and used with Java.


Cactus

A JUnit extension for unit testing server-side code such as servlets, JSPs, or EJBs. It is written in and used with Java.


JFCUnit

A JUnit extension that supports writing GUI tests for Java Swing applications. It is written in and used with Java.


NUnitForms

An NUnit extension that supports GUI tests of Windows Forms applications. It is written in C# and can be used with any .NET language.


HTMLUnit

An extension to JUnit that tests web-based applications. It simulates a web browser, and is oriented towards writing tests that deal with HTML pages.


HTTPUnit

Another JUnit extension that tests web-based applications. It is oriented towards writing tests that deal with HTTP request and response objects.


Jester

A helpful extension to JUnit that automatically finds and reports code that is not covered by unit tests. Versions exist for Python (Pester) and NUnit (Nester). Many other code coverage tools with similar functionality exist.