On 10 April 2013 06:23, Rick Jelliffe <rjelliffe@allette.com.au> wrote:
> Ghost? Boo!
>
> I have four other angles:
>
> 1) Test driven development. Before=as=so-soon-after-that-noone-notices
> you make some software, you make a test for it. If the document has a fixed
> structure, you can test by instances. If the document is semi-structured or
> recursive, your test specification has to allow those kinds of structures
> too: and for XML such a specification is called a schema.
Using a schema here can only get you so far.... it wont catch
hardcoded elements or (yet again) the business rules (unless they are
in the schema)
You need an additional layer that tests by pulling the values out from
the input (or wherever the values in the result are taken from) and
comparing them to the result. My tests are along the lines of:
String someValue = runQueryOnInput("/some/path/to/val/string(.)");
String valueInResult = runQueryOnOutput("/result/path/to/val/string(.)");
assertEquals(someValue, valueInResult);
...eg it uses xquery to select a value from the input xml, and again
to select a value from the result, then does the assert. (I have
simple test framework I wrote that allows the tests to be simple like
this).
For business rules that only apply to the result such as "if nnn is
true then every yyy must be false" you can do:
assertTrue(Boolean.valueOf(runQueryOnOutput("if (nnn = 'true') then
not(yyy = 'true') else true()")
...or whatever you test you can conjure up in xquery.
So while validating the result is essential, it's not always
sufficient on its own.
--
Andrew Welch
http://andrewjwelch.com