パイプラインを含む単体テスト機能の使用
このトピックでは、単体テスト機能を使用して、FlatFileReceive パイプラインの例に、パイプラインの単体テストを追加する方法について説明します。 パイプライン単体テストは、「 パイプライン ツール」に記載されている Pipeline.exe ツールに似ています。 プロジェクト のプロパティの [ 配置 ] タブで単体テストを有効にすると、プロジェクトのパイプライン クラスは Microsoft.BizTalk.TestTools.Pipeline.TestableReceivePipeline から派生します。 このクラスは、Pipeline.exe ツールが公開する機能と同じ機能の一部をモデル化します。
前提条件
最初に、FlatFileReceive サンプルを構築する手順を実行して、このサンプルに慣れる必要があります。 FlatFileReceive サンプルをビルドする手順を含むドキュメントは、FlatFileReceive (BizTalk Server Sample) にあります。
FlatFileReceive サンプルへの単体テスト プロジェクトの追加
FlatFileReceive サンプルに単体テスト プロジェクトを追加するには
Visual Studio で、FlatFileReceive.sln ソリューション ファイルを開きます。
ソリューション エクスプローラーで FlatFileReceive プロジェクトを右クリックし、[プロパティ] をクリックします。
[プロジェクト Designer] で、[配置プロパティ] ページ タブをクリックし、[単体テストを有効にする] を に
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 メソッドのパラメーターは次のとおりです。
パラメーター名 | 説明 |
---|---|
Documents | パイプラインによって処理されるメッセージを格納する StringCollection。 |
指定項目 | メッセージの部分を格納する StringCollection。 |
スキーマ | 各メッセージの種類を対応する *.xsd スキーマ ファイルにマップするために使用されるディクショナリ マッピング。 キーは Namespace.Type 形式である必要があります。 使用される名前空間と型は、Visual Studio の *.xsd ファイルのプロパティ ウィンドウで確認する必要があります。 次のスクリーンショットを見てください。 XSD ファイルのプロパティ ウィンドウに表示された名前空間と型。 |