I am attempting to develop an XML schema (XSD) to represent a set of unit tests for some code. (Specifically, I am testing Oracle PL/SQL stored procedures.)
I would like to have something that represents:
- the procedure itself
- the data used for each test (both arguments to be supplied to the procedure, and data to be loaded into the database before beginning the test(s))
- the expected result of each test
Each procedure can have multiple tests, but I think I would like to only have the tests for one procedure in each XML file.
Below is the schema I have so far: any comments or suggestions would be welcomed!
<?xml version="1.0" encoding="UTF-8"?>
<schema targetNamespace="http://www.example.com/TestData"
elementFormDefault="qualified" xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:tns="http://www.example.com/TestData">
<complexType name="ProcedureType">
<complexContent>
<extension base="tns:AbstractProcedureType">
</extension>
</complexContent>
</complexType>
<complexType name="FunctionType">
<complexContent>
<extension base="tns:AbstractProcedureType">
<attribute name="ReturnType" type="tns:DataTypeType"></attribute>
</extension>
</complexContent>
</complexType>
<complexType name="AbstractProcedureType" abstract="true">
<sequence>
<element name="PackageName" type="string" minOccurs="0" maxOccurs="1"></element>
<element name="Name" type="string" minOccurs="1" maxOccurs="1"/>
<element name="Arguments" type="tns:ArgumentsType"
minOccurs="1" maxOccurs="1" />
</sequence>
</complexType>
<complexType name="ArgumentType">
<attribute name="Name" type="string" use="required"/>
<attribute name="DataType" type="tns:DataTypeType"
use="required"/>
</complexType>
<simpleType name="DataTypeType">
<restriction base="string">
<enumeration value="VARCHAR2"/>
<enumeration value="NUMBER"/>
</restriction>
</simpleType>
<complexType name="TestType">
<sequence>
<choice maxOccurs="1" minOccurs="1">
<element name="Procedure" type="tns:ProcedureType"></element>
<element name="Function" type="tns:FunctionType"></element>
</choice>
<element name="Instance" type="tns:TestInstanceType"></element>
</sequence>
</complexType>
<complexType name="TestInstanceType">
<sequence>
<element name="Arguments" type="tns:ArgumentType"
maxOccurs="unbounded" minOccurs="0">
</element>
<element name="ExpectedResult"
type="tns:ExpectedResultType" maxOccurs="1" minOccurs="1">
</element>
</sequence>
</complexType>
<complexType name="ExpectedResultType">
<attribute name="Type" use="required">
<simpleType>
<restriction base="string">
<enumeration value="value"></enumeration>
<enumeration value="exception"></enumeration>
<enumeration value="null"></enumeration>
<enumeration value="nothing"></enumeration>
<enumeration value="query"></enumeration>
</restriction>
</simpleType>
</attribute>
</complexType>
<complexType name="ArgumentsType">
<sequence>
<element name="Argument" type="tns:ArgumentType" maxOccurs="1" minOccurs="0"></element>
</sequence>
</complexType>
<element name="Tests" type="tns:TestsType"></element>
<complexType name="TestsType">
<sequence>
<element name="Test" type="tns:TestType" maxOccurs="unbounded" minOccurs="0"></element>
</sequence>
</complexType>
</schema>