对管道使用单元测试功能

本主题演示如何使用单元测试功能为 FlatFileReceive 管道示例中的管道添加单元测试。 管道单元测试类似于此处所述的 Pipeline.exe 工具: 管道工具。 在项目属性的“ 部署 ”选项卡上启用单元测试时,项目中的管道类派生自 Microsoft.BizTalk.TestTools.Pipeline.TestableReceivePipeline。 此类会对 Pipeline.exe 工具公开的某些相同功能进行建模。

必备条件

必须首先按照步骤生成 FlatFileReceive 示例,并熟悉该示例。 可在此处找到包含生成 FlatFileReceive 示例的步骤的文档:FlatFileReceive (BizTalk Server 示例)

将单元测试项目添加到 FlatFileReceive 示例

将单元测试项目添加到 FlatFileReceive 示例

  1. 在 Visual Studio 中,打开 FlatFileReceive.sln 解决方案文件。

  2. 在解决方案资源管理器中,右键单击 FlatFileReceive 项目,然后单击“属性”。

  3. 在“Project Designer”中,单击“部署”属性页选项卡,并将“启用单元测试”设置为 True

  4. 关闭项目属性页,保存更改。

  5. 在“main”菜单上,单击“生成”,然后单击“重新生成解决方案”。

  6. 在“main”菜单上,单击“测试”,然后单击“新建测试”。

  7. “添加新测试 ”对话框中,为“添加到测试项目”字段选择“ 创建新的 Visual C#测试项目 ”。 在“模板”列表中选择“单元测试向导”,然后单击“确定”。

  8. 在“ 新建测试项目 ”对话框中,将项目名称保留为 TestProject1 ,然后单击“ 创建”。

  9. 在“创建单元测试”对话框中,展开类型并选择 Microsoft.Samples.BizTalk.FlatFileReceive.FFReceivePipeline 节点下的 FFReceivePipeline () 构造函数。 单击 “确定”

添加测试代码以测试管道

添加测试代码以测试管道

  1. 将以下引用添加到 TestProject1 项目:

    • BizTalk 管道 Interop

    • Microsoft.BizTalk.TestTools

    • Microsoft XLANG/s 基本类型

  2. 在解决方案资源管理器中,打开 FFReceivePipelineTest.cs,然后将以下指令添加到该文件的顶部:

    using System.IO;
    using System.Collections.Specialized;
    using System.Collections.Generic;
    
  3. 滚动到文件底部,将 FFReceivePipelineConstructorTest 方法替换为以下代码,该代码在测试管道之前验证管道输入是否存在。 此代码还验证是否生成符合平面文件架构的消息。

    [TestMethod()]
    public void FFReceivePipelineUnitTest()
    {
        //=== Pipeline class derived from TestableReceivePipeline ===//
        FFReceivePipeline target = new FFReceivePipeline();
    
        //=== Collection of messages to test the flat file pipeline ===//
        StringCollection documents = new StringCollection();
        string strSourcePO_XML = @".\..\..\..\FlatFileReceive_in.txt";
        Assert.IsTrue(File.Exists(strSourcePO_XML));
        documents.Add(strSourcePO_XML);
    
        //=== Only a body part for this test message so an empty ===//
        //=== collection will be passed.                         ===//
        StringCollection parts = new StringCollection();
    
        //=== Dictionary mapping the schema to the namespace and type ===//
        //=== as displayed in the properties window for the *.xsd     ===//
        Dictionary<string, string> schemas = new Dictionary<string, string>();
        string SchemaFile = @".\..\..\..\PO.xsd";
        Assert.IsTrue(File.Exists(SchemaFile));
        schemas.Add("Microsoft.Samples.BizTalk.FlatFileReceive.PO", SchemaFile);
    
        //=== Test the execution of the pipeline using the inputs ===//
        target.TestPipeline(documents, parts, schemas);
    
        //=== Validate that the pipeline test produced the message ===//
        //=== which conforms to the schema.                        ===//
        string[] strMessages = Directory.GetFiles(testContextInstance.TestDir + "\\out","Message*.out");
        Assert.IsTrue(strMessages.Length > 0);
        PO PO_target = new PO();
        foreach(string outFile in strMessages)
        {
          Assert.IsTrue(PO_target.ValidateInstance(outFile,Microsoft.BizTalk.TestTools.Schema.OutputInstanceType.XML));
        }
    }
    

生成和运行单元测试

生成并运行单元测试

  1. 在解决方案资源管理器中,右键单击“TestProject1”,然后单击“生成”。

  2. 在main菜单上,单击“测试”,然后在 Windows 列表中单击“测试视图”。

  3. 在“测试视图”窗口中,右键单击“ FFReceivePipelineUnitTest”,然后单击“ 运行所选内容”。 验证是否在“测试结果”窗口中看到 “已通过 ”。

  4. 在 TestResults 目录中检查 *.out 文件。 此文件应包含管道处理的新消息。 它应位于类似于以下示例的目录中:

    C:\Program Files\Microsoft BizTalk Server <version>\SDK\Samples\Pipelines\AssemblerDisassembler\FlatFileReceive\TestResults\Wes_BTS2009Svr 2009-02-04 09_01_04\Out

    已处理的消息应类似于以下内容:

    <purchaseOrder orderDate="1999-10-20" xmlns="http://FlatFileReceive.PO">
    
      <shipTo country="US" xmlns="">
        <name>Alice Smith</name>
        <street>123 Maple Street</street>
        <city>Mill Valley</city>
        <state>CA</state>
        <zip>90952</zip>
      </shipTo>
    
      <billTo country="US" xmlns="">
        <name>Robert Smith</name>
        <street>8 Oak Avenue</street>
        <city>Old Town</city>
        <state>PA</state>
        <zip>95819</zip>
      </billTo>
    
      <comment>Hurry, my lawn is going wild!</comment>
    
      <items xmlns="">
    
        <item partNum="872-AA">
          <productName>Lawnmower</productName>
          <quantity>1</quantity>
          <USPrice>148.95</USPrice>
          <comment xmlns="http://FlatFileReceive.PO">Confirm this is electric</comment>
        </item>
    
        <item partNum="926-AA">
          <productName>Baby Monitor</productName>
          <quantity>1</quantity>
          <USPrice>39.98</USPrice>
          <comment xmlns="http://FlatFileReceive.PO">Confirm this is electric</comment>
          <shipDate>1999-05-21</shipDate>
        </item>
    
      </items>
    
    </purchaseOrder>
    
  5. 如果任何测试失败,你可以双击“测试结果”窗口中的测试以查看导致该测试失败的添加或异常。

测试代码摘要

FlatFileReceive 项目启用单元测试时,与 FFReceivePipeline.btp 关联的 FFReceivePipeline C# 类派生自 Microsoft.BizTalk.TestTools.Pipeline.TestableReceivePipeline 类。 TestProject1 中的 FFReceivePipelineUnitTest 方法使用 FFReceivePipeline 继承的 TestPipeline 方法来测试平面文件接收管道。 在管道处理完消息后,将根据平面文件架构对输出消息进行验证。 TestPipeline 方法的参数如下所示:

参数名称 说明
文档 包含管道处理的消息的 StringCollection。
组成部分 包含消息部分的 StringCollection。
架构 用于将每种消息类型映射到相应的 *.xsd 架构文件的目录映射。 密钥必须采用 Namespace.Type 格式。 应在 Visual Studio 中 *.xsd 文件的属性窗口中记录使用的命名空间和类型。 请参阅以下屏幕截图。

突出显示所选 XSD 文件的命名空间和类型的图像。

通过 XSD 文件的属性窗口公开的命名空间和类型。

另请参阅

将单元测试功能与架构和映射配合使用使用单元测试 (Visual Studio)