このトピックでは、単体テスト機能を使用して、FlatFileReceive パイプラインの例でパイプラインの単体テストを追加する方法について説明します。 パイプライン単体テストは、「 パイプライン ツール」に記載されている Pipeline.exe ツールに似ています。 プロジェクト プロパティの [ 配置 ] タブで単体テストを有効にすると、プロジェクト内のパイプライン クラスは Microsoft.BizTalk.TestTools.Pipeline.TestableReceivePipeline から派生します。 このクラスは、Pipeline.exe ツールによって公開される同じ機能の一部をモデル化します。
[前提条件]
まず、FlatFileReceive サンプルをビルドする手順に従って、そのサンプルを理解する必要があります。 FlatFileReceive サンプルをビルドする手順を含むドキュメントは、 FlatFileReceive (BizTalk Server サンプル) にあります。
FlatFileReceive サンプルへの単体テスト プロジェクトの追加
FlatFileReceive サンプルに単体テスト プロジェクトを追加するには
Visual Studio で、FlatFileReceive.sln ソリューション ファイルを開きます。
ソリューション エクスプローラーで、 FlatFileReceive プロジェクトを右クリックし、[ プロパティ] をクリックします。
プロジェクト デザイナーで[ 配置 ]プロパティ ページ タブをクリックし、[ 単体テストを有効にする] を
True
に設定します。変更を保存するプロジェクトのプロパティ ページを閉じます。
メイン メニューの [ ビルド] をクリックし、[ ソリューションのリビルド] をクリックします。
メイン メニューの [ テスト] をクリックし、[ 新しいテスト] をクリックします。
[新しいテストの追加] ダイアログ ボックスで、[テスト プロジェクトに追加] フィールドの [新しい Visual C# テスト プロジェクトの作成] を選択します。 [テンプレート] ボックスの一覧で [単体テスト ウィザード] を選択し、[OK] をクリックします。
[ 新しいテスト プロジェクト ] ダイアログ ボックスで、プロジェクト名を TestProject1 のままにして、[ 作成] をクリックします。
[単体テストの作成] ダイアログ ボックスで、型を展開し、Microsoft.Samples.BizTalk.FlatFileReceive.FFReceivePipeline ノードの下にある FFReceivePipeline() コンストラクターを選択します。 OK をクリックします。
パイプラインをテストするためのテスト コードの追加
パイプラインをテストするテスト コードを追加するには
TestProject1 プロジェクトに次の参照を追加します。
BizTalk パイプライン相互運用機能
Microsoft.BizTalk.TestTools
Microsoft XLANG/s 基本型
ソリューション エクスプローラーでFFReceivePipelineTest.cs開き、そのファイルの先頭に次のディレクティブを追加します。
using System.IO; using System.Collections.Specialized; using System.Collections.Generic;
ファイルの一番下までスクロールし 、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)); } }
単体テストのビルドと実行
単体テストをビルドして実行するには
ソリューション エクスプローラーで、[ TestProject1] を右クリックし、[ ビルド] をクリックします。
メイン メニューの [ テスト] をクリックし、 Windows の一覧で [ テスト ビュー] をクリックします。
[テスト ビュー] ウィンドウで、[ FFReceivePipelineUnitTest] を右クリックし、[ 選択項目の実行] をクリックします。 [テスト結果] ウィンドウに [合格 ] が表示されていることを確認します。
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>
いずれかのテストが失敗した場合は、[テスト結果] ウィンドウでテストをダブルクリックすると、そのテストエラーの原因となったアサートまたは例外が表示されます。
テスト コードの概要
FlatFileReceive プロジェクトで単体テストが有効になっている場合、FFReceivePipeline.btp に関連付けられている FFReceivePipeline C# クラスは、Microsoft.BizTalk.TestTools.Pipeline.TestableReceivePipeline クラスから派生しました。 TestProject1 の FFReceivePipelineUnitTest メソッドは、FFReceivePipeline が継承した TestPipeline メソッドを使用して、フラット ファイル受信パイプラインをテストしました。 パイプラインがメッセージを処理した後、出力メッセージはフラット ファイル スキーマに対して検証されました。 TestPipeline メソッドのパラメーターは次のとおりです。
パラメーター名 | 説明 |
---|---|
ドキュメント | パイプラインによって処理されるメッセージを含む StringCollection。 |
部品 | メッセージの部分を含む StringCollection。 |
スキーマ | 各メッセージの種類を対応する *.xsd スキーマ ファイルにマップするために使用されるディクショナリ マッピング。 キーの形式は Namespace.Type である必要があります。 使用される名前空間と型は、Visual Studio の *.xsd ファイルのプロパティ ウィンドウで確認する必要があります。 次のスクリーンショットを見てください。![]() XSD ファイルのプロパティ ウィンドウから公開される名前空間と型。 |