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

本主题演示如何使用单元测试功能为 HelloWorld 业务流程示例中的架构和映射添加单元测试。

注释

地图的单元测试功能目前不支持多个输入地图。

先决条件

必须先按照构建 HelloWorld 示例的步骤进行操作。 可在此处找到这些步骤: HelloWorld (BizTalk Server 示例)

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

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

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

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

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

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

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

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

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

  9. 在“创建单元测试”对话框中,展开类型并选择Microsoft.Samples.BizTalk.HelloWorld.POSchema 节点下的 POSchema() 构造函数。 此外,在 Microsoft.Samples.BizTalk.HelloWorld.POToInvoice 节点下选择 POToInvoice() 构造函数。 下图显示了应进行的选择。 进行下面所示的选择后,按 “确定”。

    显示“创建单元测试”对话框的图像。

添加测试代码以测试模式和映射

  1. 从“添加引用”对话框中的 .NET 选项卡添加对 TestProject1 项目的以下引用:

    • Microsoft.BizTalk.TestTools

    • Microsoft XLANG/s 基类型

  2. 在解决方案资源管理器中,打开POSchemaTest.cs

  3. 滚动到文件的底部,并将 POSchemaConstructorTest 方法替换为以下代码,用于验证示例 PO 输入消息:

    [TestMethod()]
    public void POSchemaInstanceValidationTest()
    {
        POSchema target = new POSchema();
    
        //=== The SamplePOInput.xml file from <Samples Path>\Orchestrations\HelloWorld ===//
        string strSourcePO_XML = testContextInstance.TestDir + "..\\..\\..\\SamplePOInput.xml";
    
        //=== Validate the SamplePOInput message against the schema ===//
        Assert.IsTrue(target.ValidateInstance(strSourcePO_XML, Microsoft.BizTalk.TestTools.Schema.OutputInstanceType.XML));
    }
    
  4. 在解决方案资源管理器中,打开POToInvoiceTest.cs,并将以下指令添加到该文件顶部:

    
    using System.IO;
    
  5. 请滚动至文件底部,并将 POToInvoiceConstructorTest 方法替换为以下代码,该代码利用示例 PO 输入消息来测试映射:

    
    [TestMethod()]
    public void POToInvoiceMapTest()
    {
        POToInvoice target = new POToInvoice();
    
        //=== Use the HelloWorld sample directory path for the message files ===//
    
        string strSourcePO_XML = testContextInstance.TestDir + "..\\..\\..\\SamplePOInput.xml";
        string strDestInvoice_XML = testContextInstance.TestDir + "..\\..\\..\\SampleInvoiceOutput.xml";
    
        //=== Test the map by using the TestMap method of the TestableMapBase class ===//
    
        target.ValidateOutput = true;
        target.TestMap(strSourcePO_XML,
                       Microsoft.BizTalk.TestTools.Schema.InputInstanceType.Xml,
                       strDestInvoice_XML,
                       Microsoft.BizTalk.TestTools.Schema.OutputInstanceType.XML);
    
        //=== Output file should be created as a result of testing the map ===//
    
        Assert.IsTrue(File.Exists(strDestInvoice_XML));
    }
    

生成并运行单元测试

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

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

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

  4. 在“测试视图”窗口中,右键单击 POToInvoiceMapTest,然后单击“ 运行选择”。 验证你是否在“测试结果”窗口中看到通过

  5. 如果任何测试失败,可以在“测试结果”窗口中双击测试,以查看导致该测试失败的断言或异常。

测试代码摘要

HelloWorld 项目启用单元测试后,与 POSchema.xsd 关联的 C# 类派生自 Microsoft.BizTalk.TestTools.Schema.TestableSchemaBase 类。 TestProject1 中的 POSchemaInstanceValidationTest 方法使用 POSchema 类的 ValidateInstance 方法针对 PO 架构验证 SamplePOInput.xml。

同样,为 HelloWorld 项目启用单元测试时,与 POToInvoice.btm 映射关联的 C# 类派生自 Microsoft.BizTalk.TestTools.Mapper.TestableMapBase 类。 POToInvoiceMaptest 方法使用 POToInvoice 类的 TestMap 方法使用相同的 SamplePOInput.xml 消息测试地图。 这使得 SampleInvoiceOutput.xml 在 HelloWorld 目录中被创建。

另请参阅

通过管道使用单元测试功能使用单元测试(适用于 Visual Studio)