ワークフローの1つのシーケンスのみをテストするつもりです(個別のCodeActivityではありません)。必要なシーケンスのみを呼び出して、必要な引数を渡す方法はありますか?
ご関心をお寄せいただきありがとうございます。
ワークフローの1つのシーケンスのみをテストするつもりです(個別のCodeActivityではありません)。必要なシーケンスのみを呼び出して、必要な引数を渡す方法はありますか?
ご関心をお寄せいただきありがとうございます。
私が通常行うことは、ワークフローをいくつかのサブワークフローに分割することです。
したがって、実行できるのは、このシーケンスを内部に配置するアクティビティを作成し、それをメインワークフローで置き換えることです。その後、個別にテストできます。
お役に立てば幸いです。
答えは:いいえ、できません。
少なくとも効率的ではありません。ワークフローのXAMLを使用して、さまざまな思考を行うことができます。内側のシーケンスを抽出することが頭に浮かびますが、実行しないでください。
シーケンスが外部スコープに割り当てられたローカル変数を使用している場合はどうでしょうか?これは、孤立した内部シーケンスをテストしているときにうまくいかない可能性があると考えていることの1つです。
とにかく、なぜあなたはそのようなことをしたいのですか?これは、別のメソッド内にあるメソッド呼び出しを単体テストするのと同じです。外部メソッド(ワークフロー自体)を呼び出すか、内部メソッド(シーケンス)を分離してテストできるようにします。
編集:
さて、あなたがそれに沿って進みたいなら、そしてあなたがその巨大なワークフローでXAMLを持っていると数えるなら、多分あなたはこのような何かで逃げることができます:
XAMLをアクティビティにロードします。
var activity = ActivityXamlServices.Load("c:\hugeworkflow.xaml");
シリアル化されたアクティビティを持ち、内部シーケンスがどこにあるかを知っていることを数えて、内部でそれを検索しますactivity
。そのシーケンスが別のシーケンス(ワークフロールート)内にあると想像してみましょう。
var rootSequence = activity as Sequence;
var innerSequence = rootSequence
.Activities
.FirstOrDefault(a => a is Sequence) as Sequence;
これで、次のように内部シーケンスを実行できます。
var arguments = new Dictionary<string, object>
{
{ "IntArgument", 10 },
{ "StringArgument", "hello world" }
};
WorkflowInvoker.Invoke(innerSequence, arguments);
シーケンスから何かをどのように主張できますか、私にはわかりません。
このコードはまだテストしていないので、何かが足りないかもしれませんが、あなたはその考えを理解しています。
codeplexMicrosoft.Activities.UnitTesting
のライブラリを使用して、個々のアクティビティを単体テストできます。シナリオに一致するその他のドキュメントと例。
あなたはおそらくこれを達成するための技術を採用することができますが、それはあまり簡単ではありません。アイデアは、この1つのシーケンス以外の他のすべてのアクティビティをモックアクティビティに置き換え、Microsoft.Activities.UnitTestingプロジェクトを使用してワークフローを呼び出すことです。
このリンクは私が何を意味するかを説明しています
SOLIDの原則がインターフェイス分離と単一責任を強く支持していることを考えると、好奇心から、アトミックユニットと呼ぶ(したがって、独立してテストしたい)ワークフローのセグメントを個別のアクティビティまたは子ワークフローに分離することにメリットはありませんか? ?