Unit Testing Framework for XQuery

Posted by Knut Vatsendvik on Oracle Blogs See other posts from Oracle Blogs or by Knut Vatsendvik
Published on Tue, 16 Mar 2010 23:15:04 +0000 Indexed on 2010/03/16 23:31 UTC
Read the original article Hit count: 421

Filed under:

This posting provides a unit testing framework for XQuery using Oracle Service Bus. It allows you to write a test case to run your XQuery transformations in an automated fashion. When the test case is run, the framework returns any differences found in the response.

The complete code sample with install instructions can be downloaded from here.

Writing a Unit Test

You start a new Test Case by creating a Proxy Service from Workshop that comes with Oracle Service Bus.

image

In the General Configuration page select Service Type to be Messaging Service

 

 

 

 

 

GetCompanyProxy

In the Message Type Configuration page link both the Request & Response Message Type to the TestCase element of the UnitTest.xsd schema

 

 

 

 

 

 

 

 

The TestCase element consists of the following child elements

TestCase

The ID and optional Name element is simply used for reference.

The Transformation element is the XQuery resource to be executed.

The Input elements represents the input to run the XQuery with. The Output element represents the expected output. These XML documents are “also” represented as an XQuery resource where the XQuery function takes no arguments and returns the XML document.

Why not pass the test data with the TestCase? Passing an XML structure in another XML structure is not very easy or at least not very human readable. Therefore it was chosen to represent the test data as an loadable resource in the OSB. However you are free to go ahead with another approach on this if wanted.

The XMLDiff elements represents any differences found.

A sample on input is shown here.

Modeling the Message Flow

Then the next step is to model the message flow of the Proxy Service.

LoadInput

In the Request Pipeline create a stage node that loads the test case input data.      For this, specify a dynamic XQuery expression that evaluates at runtime to the name of a pre-registered XQuery resource. The expression is of course set by the input data from the test case.

image

 

 

 

 

 

image

Add a Run stage node. Assign the result of the XQuery, that is to be run, to a context variable. Define a mapping for each of the input variables added in previous stage.

image 

 

image

Add a Compare stage. Like with the input data, load the expected output data. Do a compare using XMLDiff XQuery provided where the first argument is the loaded output test data, and the second argument the result from the Run stage. Any differences found is replaced back into the test case XMLDiff element.

image

In case of any unexpected failure while processing, add an Error Handler to the Pipeline to capture the fault.

image

To pass back the result add the following Insert action In the Response Pipeline.

image

A sample on output is shown here.

© Oracle Blogs or respective owner