XMLUnit offers assert methods to test many aspects of two pieces of XML by providing Java interfaces that mirror the SAX, DOM and XSLT APIs. You don't need to know anything about these APIs to use XMLUnit but if you do it can make things more concise. For example, the following two assertions are equivalent: Assert.assertXMLEqual(expectedXmlString, actual); and XMLAssert.assertXMLEqual(expected, actual); The first one uses DOM but the second one doesn't mention it. Additionally XMLUnit offers an XMLReader interface that allows to set up a pipeline of XMLFilter objects that modify or process invocation events before they reach the final assertion stage. This is useful when the document to be asserted has parts that cannot be controlled, e.g. time stamps, or when additional normalization is desired beyond what is offered by the canonicalization strategies built into XMLUnit. Last but not least XMLUnit provides utility methods dealing with escaping of problematic characters in Java String literals as well as conversion of Nodes back into textual representations as Strings. These come in very handy when creating unit tests as part of a build process, e.g. using JUnit's assertEquals method. XMLUnit's design goals are correctness, simplicity and flexibility. A secondary goal has been good integration with JUnit so that all features are available from within a JUnit test runner without having to learn yet another framework. As far as possible similar assertion semantics are used throughout to promote ease of use even across very different APIs. Flexibility comes both from support for a large number of assertion options as well as extension points that allow for custom implementations where required