DTD processing


The purpose of a DTD is to define the legal building blocks of an XML document. It defines the document structure with a list of legal elements. A DTD can be declared inline in your XML document, or as an external reference.

By default, NBi doesn’t execute DTD commands in the XML file describing the test-suite. The main reason is security. But if you trust the content of your test-suite, it’s possible to activate DTD processing. To enable the DTD processing, you must change the config file and set the attribute allowDtdProcessing to true (default value is false).

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="nbi" type="NBi.NUnit.Runtime.NBiSection, NBi.NUnit.Runtime"/>
</configSections>
<nbi
testSuite="..."
allowDtdProcessing="true"
/>
</configuration>

Including a file in the test-suite

A good use-case for the DTD processing is the inclusion of some tests defined in an external file to your main test suite. A good reason to have this scenario is when you want to include a set of tests into two distinct test-suites.

First, in your test suite, you must specify a short name (here under “includeSecondTest”) and the filename of the file to include (here under TestSuiteIncludedTestSuite.xml).

<!DOCTYPE testSuite [
<!ENTITY includeSecondTest SYSTEM "TestSuiteIncludedTestSuite.xml">

]>

Then at the position you want to include your file you must precede the short-name given above by an “&” and add a semi-colon “;”. (See last lines). The DTD processing will include your external file at the specified position.

<testSuite name="The TestSuite" xmlns="http://NBi/TestSuite">
<test name="My first test case" uid="0001">
<system-under-test>
<execution>
<query name="Select first product" connectionString="Data Source=.;Initial Cataloging;Integrated Security=True">
SELECT TOP 1 * FROM Product;
</query>
</execution>
</system-under-test>
<assert>
<syntacticallyCorrect />
</assert>
</test>
&includeSecondTest;
</testSuite>

You can use the same concept to include result-sets or any other idea that you could have. DTD processing has other features that you should investigate.