0

統合コンポーネントに基づくコンテキストで単体テストを作成するにはどうすればよいですか?

拡張機能が実装を解決しようとしてエラーメッセージを返すため、問題を特定しました。

"オブジェクト参照がオブジェクト インスタンスに設定されていません。"

私のクラス:

 public sealed class GetListOfServiceIdsToProcess
{
   public InOutArgument<IArguments> Arguments { get; set; }

    protected override void Execute(CodeActivityContext context)
    {

        // I am recieving my error exception here
        context.GetExtension<lib.Extension.MyExtenstion>();

        var targetIds= (List<int>)Settings.Get("targetIds");

        var wfa = this.Arguments.Get(context);
        wfa.ListTargetIds = targetIds;

        Arguments.Set(context, wfa);            
    }
}

これまでの私のテスト:

私はそれを得ることができる限り、テストの実装に問題があります:

    /// <summary>
    ///A test for Execute
    ///</summary>
    [TestMethod()]
    public void ExecuteTest()
    {
        // create Isettings mock to return collection of service ids

        var expected = new List<int>() { 30, 20 };

        var wfaInput = new TestWorkFlow();

        var serviceIdList = new GetListOfServiceIdsToProcess();
        var wfParam = new Dictionary<string, object>();
        wfParam.Add("WorkFlowArguments", wfaInput);

        var results = WorkflowInvoker.Invoke(serviceIdList, wfParam);
        var wfaResult = (IWorkFlowArguments)results["WorkFlowArguments"];

        Assert.AreEqual(expected, wfaResult.ListOfServiceIdsToProcess);
    }
4

3 に答える 3

0

複数のオプションを実行しましたが、問題は MS ワークフローです。ワークフロー コード アクティビティからすべてのロジックを別のクラスに抽出し、このクラスをテストしました。

これが私にできる最善のことです。私は基本クラスを持っているので、それは注入されますが、必要なものを簡単に実装できませんでした。

とにかく助けてくれてありがとう。

于 2012-07-14T11:52:44.507 に答える
0
[TestMethod]
public void ExecuteTest()
{
    // ...

    var invoker = new WorkflowInvoker(activityToTest); 

    // This way your extension will be available during execution
    invoker.Extensions.Add(new MyExtension());

    var results = invoker.Invoke(inputArgs);

    // ....

}
于 2012-05-08T16:31:29.977 に答える
0

静的な WorkflowInvoker.Invoke() を使用する代わりに、WorkflowInvoker インスタンスを新しく作成し、モック、またはテストに必要なものは何でも、lib.Extension.MyExtenstion を Extensions コレクションに追加します。

于 2012-05-08T15:36:40.173 に答える