2

ワークフローの1つのシーケンスのみをテストするつもりです(個別のCodeActivityではありません)。必要なシーケンスのみを呼び出して、必要な引数を渡す方法はありますか?

ご関心をお寄せいただきありがとうございます。

4

4 に答える 4

2

私が通常行うことは、ワークフローをいくつかのサブワークフローに分割することです。

したがって、実行できるのは、このシーケンスを内部に配置するアクティビティを作成し、それをメインワークフローで置き換えることです。その後、個別にテストできます。

お役に立てば幸いです。

于 2013-04-03T12:44:48.753 に答える
1

答えは:いいえ、できません。

少なくとも効率的ではありません。ワークフローの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);

シーケンスから何かをどのように主張できますか、私にはわかりません。

このコードはまだテストしていないので、何かが足りないかもしれませんが、あなたはその考えを理解しています。

于 2013-03-11T23:53:54.497 に答える
0

codeplexMicrosoft.Activities.UnitTestingのライブラリを使用して、個々のアクティビティを単体テストできます。シナリオに一致するその他のドキュメント例。

于 2013-03-12T09:35:47.143 に答える
0

あなたはおそらくこれを達成するための技術を採用することができますが、それはあまり簡単ではありません。アイデアは、この1つのシーケンス以外の他のすべてのアクティビティをモックアクティビティに置き換え、Microsoft.Activities.UnitTestingプロジェクトを使用してワークフローを呼び出すことです。

このリンクは私が何を意味するかを説明しています

SOLIDの原則がインターフェイス分離と単一責任を強く支持していることを考えると、好奇心から、アトミックユニットと呼ぶ(したがって、独立してテストしたい)ワークフローのセグメントを個別のアクティビティまたは子ワークフローに分離することにメリットはありませんか? ?

于 2013-03-15T14:42:18.250 に答える