Essentially a Unit Test is a procedure, used to validate a particular piece of source code. Effective Unit Testing is vital to the success of any project. Unit Testing results in reduced defects in the next level of testing. Traditionally we have used NUnit to test any assembly (*.DLL). For testing BizTalk Orchestrations we use a similar approach. We test BizTalk Orchestrations as a Black Box.
We would need to download the following, in order to perform unit testing of BizTalk Orchestrations.
The default installation directory of BizUnit would be "C:\Program Files\Microsoft Services\BizUnit 2.1"
The default installation directory of NUnit would be "C:\Program Files\NUnit-Net-2.0 2.2.8"
The screen shot below shows the Purchase Order (PO) schema and the Purchase Order Acknowledgement (POA) schema.
|
![]() |
The screen shot below shows the transfomation of PO to POA.
The screen shot below shows the POProcess Orchestration.
Receive Shape.
Send Shape is used to send out the POA message.
Decide Shape is used to set the PO status to either APPROVED or REJECTED
Send Shape is used to send out the APPROVED or REJECTED PO. The screen shot below shows the sample Purchase Order (PO).
After the installation of BizUnit2006, create a new "class library" project in Visual Studio 2005 and add the following code as shown below...
using System; using System.Collections.Generic; using System.Text; using Microsoft.Services.BizTalkApplicationFramework.BizUnit; using NUnit.Framework; namespace BizTalkUnitTest { [TestFixture] public class TestPO { public TestPO() { } [TestFixtureSetUp] public void Setup() { // Stopping and Starting BizTalkHostInstance BizUnit bizUnit = new BizUnit(@"C:\PurchaseOrderSystem\TestCases\Test_Setup.xml", BizUnit.TestGroupPhase.TestGroupSetup); bizUnit.RunTest(); } [Test] public void ValidatePO_Rejected() { // Testing Orchestration - PO - Rejection BizUnit bizUnit = new BizUnit(@"C:\PurchaseOrderSystem\TestCases\Test_1_POSystem.xml"); bizUnit.RunTest(); } [Test] public void ValidatePO_Approved() { // Testing Orchestration - PO - Approval BizUnit bizUnit = new BizUnit(@"C:\PurchaseOrderSystem\TestCases\Test_2_POSystem.xml"); bizUnit.RunTest(); } } }
using Microsoft.Services.BizTalkApplicationFramework.BizUnit; using NUnit.Framework;
BizUnit class and mark the attributes [Test]/[TestFixture] respectively. BizUnit bizUnit = new BizUnit(@"C:\PurchaseOrderSystem\TestCases\Test_1_POSystem.xml"); bizUnit.RunTest();
BizUnit class (NOTE: The actual test steps and validation is present in the XML file Test_1_POSystem.xml) and invoke the method RunTest. The BizUnit XML file used to test the Orchestration is shown below
<TestCase testName="Test_1_ProcessPO"> <TestSetup> </TestSetup> <TestExecution> <TestStep assemblyPath="" typeName="Microsoft.Services.BizTalkApplicationFramework.BizUnit.FileCreateStep"> <SourcePath>C:\PurchaseOrderSystem\InputFiles\PO_001.xml</SourcePath> <CreationPath>C:\PurchaseOrderSystem\POIn\PO_001.xml</CreationPath> </TestStep> <TestStep assemblyPath="" typeName="Microsoft.Services.BizTalkApplicationFramework.BizUnit.FileValidateStep"> <Timeout>60000</Timeout> <Directory>C:\PurchaseOrderSystem\POAckOut</Directory> <SearchPattern>*.xml</SearchPattern> <DeleteFile>true</DeleteFile> <ValidationStep assemblyPath="" typeName="Microsoft.Services.BizTalkApplicationFramework.BizUnit.XmlValidationStep"> <XmlSchemaPath>C:\PurchaseOrderSystem\POA.xsd</XmlSchemaPath> <XmlSchemaNameSpace>http://PurchaseOrderSystem.POA</XmlSchemaNameSpace> <XPathList> <XPathValidation query="/*[local-name()='POAck' and namespace-uri()='http://PurchaseOrderSystem.POA']/*[local-name()='PONum' and namespace-uri()='']">PO_001</XPathValidation> <XPathValidation query="/*[local-name()='POAck' and namespace-uri()='http://PurchaseOrderSystem.POA']/*[local-name()='POItemsCount' and namespace-uri()='']">2</XPathValidation> </XPathList> </ValidationStep> </TestStep> <TestStep assemblyPath="" typeName="Microsoft.Services.BizTalkApplicationFramework.BizUnit.FileValidateStep"> <Timeout>60000</Timeout> <Directory>C:\PurchaseOrderSystem\POOut</Directory> <SearchPattern>*.xml</SearchPattern> <DeleteFile>true</DeleteFile> <ValidationStep assemblyPath="" typeName="Microsoft.Services.BizTalkApplicationFramework.BizUnit.XmlValidationStep"> <XmlSchemaPath>C:\PurchaseOrderSystem\PO.xsd</XmlSchemaPath> <XmlSchemaNameSpace>http://PurchaseOrderSystem.PO</XmlSchemaNameSpace> <XPathList> <XPathValidation query="/*[local-name()='PORequest' and namespace-uri()='http://PurchaseOrderSystem.PO']/*[local-name()='PONum' and namespace-uri()='']">PO_001</XPathValidation> <XPathValidation query="/*[local-name()='PORequest' and namespace-uri()='http://PurchaseOrderSystem.PO']/*[local-name()='POStatus' and namespace-uri()='']">REJECTED</XPathValidation> </XPathList> </ValidationStep> </TestStep> </TestExecution> <!-- Test cleanup: test cases should always leave the system in the state they found it --> <TestCleanup> </TestCleanup> </TestCase>
TestExecution step has several TestStep tags. Each TestStep performs one activity.
C:\PurchaseOrderSystem\POAckOut for the POAck XML file. The ValidationStep validates the XML file with the schema and also the values in the elements/attributes of the XML document. In this way we can setup the test conditions for the generated POAck XML file.
Microsoft.Services.BizTalkApplicationFramework.BizUnit.chm for more description of the XML tags. The screen shot below shows the NUnit GUI
The screen shot below shows the Event Viewer, observe the events listed.
C:\ drive.
PurchaseOrderSystem.BindingInfo.xml file to create the send and receive ports.
InputFiles directory. | You must Sign In to use this message board. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||