Click here to Skip to main content
6,594,932 members and growing! (15,095 online)
Email Password   helpLost your password?
Enterprise Systems » Microsoft BizTalk Server » General     Advanced

HOW TO Unit Test BizTalk 2006 Orchestrations using BizUnit 2006

By Naveen Karamchetti

This article explains how to perform unit testing of BizTalk 2006 Orchestrations using BizUnit 2006.
C#, Windows, .NET, Visual Studio, Dev
Posted:26 Apr 2006
Views:42,750
Bookmarked:26 times
Unedited contribution
Announcements
Loading...
 
Search    
Advanced Search
Add to IE Search
printPrint   add Share
      Discuss Discuss   Broken Article?Report  
10 votes for this article.
Popularity: 3.47 Rating: 3.47 out of 5
1 vote, 10.0%
1

2
1 vote, 10.0%
3
5 votes, 50.0%
4
3 votes, 30.0%
5

Introduction - Unit Testing

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.

Required Downloads

We would need to download the following, in order to perform unit testing of BizTalk Orchestrations.

  • Download BizUnit 2006 from Kevin B. Smith's Blog.

    The default installation directory of BizUnit would be "C:\Program Files\Microsoft Services\BizUnit 2.1"

  • Download NUnit (NUnit-2.2.8-net-2.0.msi) from NUnit.org

    The default installation directory of NUnit would be "C:\Program Files\NUnit-Net-2.0 2.2.8"

Overview - Purchase Order Sample

Schemas

The screen shot below shows the Purchase Order (PO) schema and the Purchase Order Acknowledgement (POA) schema.

PO and POA schemas

Transformation Map - PO to POA

The screen shot below shows the transfomation of PO to POA.

Orchestration

The screen shot below shows the POProcess Orchestration.

ProcessPO Orchestration Summary

  • A PO Request is received by the Receive Shape.
  • A PO Acknowledgement is generated for every PO request.
  • A Send Shape is used to send out the POA message.
  • A Decide Shape is used to set the PO status to either APPROVED or REJECTED
  • A Send Shape is used to send out the APPROVED or REJECTED PO.

Sample PO data using InfoPath 2003

The screen shot below shows the sample Purchase Order (PO).

Using BizUnit2006 to perform Orchestration Unit Testing

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();
        }
    }
}

Points to note in the above code

using Microsoft.Services.BizTalkApplicationFramework.BizUnit;
using NUnit.Framework;
  • These references are required to create an instance of BizUnit class and mark the attributes [Test]/[TestFixture] respectively.
BizUnit bizUnit = new BizUnit(@"C:\PurchaseOrderSystem\TestCases\Test_1_POSystem.xml");
bizUnit.RunTest();
  • Create an instance of 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 Test Case XML File

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>

XML TestCase - Points to note

  • The XML file is divided into three sections...
    • TestSetup
    • TestExecution
    • TestCleanup
  • The TestExecution step has several TestStep tags. Each TestStep performs one activity.
  • In the above example, the TestStep checks the folder 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.
  • We would need to build this DLL and copy it, in the NUnit project folder.
  • Refer to the help file Microsoft.Services.BizTalkApplicationFramework.BizUnit.chm for more description of the XML tags.

NUnit GUI

The screen shot below shows the NUnit GUI

Event Viewer

The screen shot below shows the Event Viewer, observe the events listed.

About the downloadable code

  • Unzip the zip file in the C:\ drive.
  • Use the PurchaseOrderSystem.BindingInfo.xml file to create the send and receive ports.
  • The PO sample is placed in the InputFiles directory.

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here

About the Author

Naveen Karamchetti


Member
Naveen Karamchetti has done his Masters (M.S.) in Software Engineering from B.I.T.S, Pilani and is based out of Fremont, CA.
The author has more than 8.5 yrs of experience in the IT industry, has started his career
starting from the good old days of using a Unix, Tcl/tk. The author has been associated with
several companies based out of Silicon Valley, California.

The author has won several programming awards within the organizations worked and is well-recognized. The author has also worked for Microsoft based at Redmond.

Hobbies include training, mentoring and research. Spends his free time travelling in the BART (Bay Area Rapid Transit) in Fremont, CA.
Occupation: Software Developer (Senior)
Location: United States United States

Other popular Microsoft BizTalk Server articles:

Article Top
You must Sign In to use this message board.
FAQ FAQ 
 
Noise Tolerance  Layout  Per page   
 Msgs 1 to 12 of 12 (Total in Forum: 12) (Refresh)FirstPrevNext
GeneralA new BizTalk unit testing framework you might be interested in ... PinmemberAli Kheyrollahi2:19 9 Mar '09  
GeneralBizUnit testing with the "FactBasedRuleEngineStep" PinmemberONeil Tomlinson3:10 30 Oct '08  
Questioncan you get a example on this orchestration by LoadGen? Pinmemberetehadi0:49 3 Aug '08  
QuestionBizUnit using the "FileValidateStep" PinmemberONeil Tomlinson0:24 25 Jun '08  
GeneralBizUnit Designer PinmemberMember 20383194:26 23 Mar '08  
GeneralBinding Info Problem... Pinmemberrajatpk9:49 29 Nov '07  
GeneralBizUnit Error! The path is not of legal form! PinmemberChenue5:48 10 May '07  
GeneralRe: BizUnit Error! The path is not of legal form! PinmemberNaveen Karamchetti5:52 10 May '07  
GeneralRe: BizUnit Error! The path is not of legal form! PinmemberChenue23:22 10 May '07  
GeneralBizUnit with SOAP PinmemberBizTalkFreak8:23 12 Mar '07  
GeneralBizUnit with SOAP PinmemberBizTalkFreak8:16 12 Mar '07  
GeneralRe: BizUnit with SOAP [modified] Pinmemberofilipe7:03 7 Feb '08  

General General    News News    Question Question    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

PermaLink | Privacy | Terms of Use
Last Updated: 26 Apr 2006
Editor:
Copyright 2006 by Naveen Karamchetti
Everything else Copyright © CodeProject, 1999-2009
Web15 | Advertise on the Code Project