0

メソッドを呼び出そうとしているWebPartBaseクラスがたくさんあります。一部のメソッドは、UI のコントロールを呼び出します。それらのコントロールに値を設定しようとしたときに例外がスローされないように、これらのコントロールを何らかの方法でスタブしたいと考えています。これを行う良い方法を知っている人はいますか?それらが初期化されていれば問題ありませんが、Webサーバーを実行せずに初期化する方法がわかりません。

私のテストコードは次のようになります。IntializeOnAdd()は KPIWebPartBase のメソッドでありKPIWebPartBaseはWebPartBaseから継承します。

        [TestMethod]
        public void InvokeAllWidgets()
        {
            var user = new User("adminqaphi");
            user.CustomerID = TestConfig.ClientID;

            var classes = typeof(KPIWebPartBase)
                .Assembly
                .GetTypes()
                .Where(t => t.IsSubclassOf(typeof(KPIWebPartBase)) && !t.IsAbstract );
            foreach (var c in classes)
            {
                Console.WriteLine(c.Name);
                var instance = (KPIWebPartBase)Activator.CreateInstance(c);
                foreach (var billingMetric in Enum.GetValues(typeof(BillingMetric)))
                {
                    instance.CurrentUser = user;
                    instance.BillingMetric = (BillingMetric)billingMetric;

                    if (instance is StartEndKPIWebPartBase)
                    {
                        var startEndKPI = (StartEndKPIWebPartBase)instance;
                        startEndKPI.StartDate = new DateTime(2007, 1, 1);
                        startEndKPI.EndDate = new DateTime(2008, 1, 1);
                    }

                    instance.InitializeOnAdd();
                }
            }
        }
4

1 に答える 1

0

それらのインターフェイスを (可能であれば)作成し、 moqを使用して外部依存関係のモックまたはスタブを作成します。

InvokeAllWidgets() はどのような動作をテストしますか?

コメントへの応答: コード (ユニット) の「内部」ロジックをテストするだけでよいように、データベースもモックする必要があると思います。そうしないと、データベースをテストすることになりますが、それはあなたが望んでいることではないと思います。また、データベースを呼び出した場合、データベース内のデータが変更された場合はどうなるでしょうか? それはあなたのテストに失敗しますか?もしそうなら、単体テストではなく統合テストを行っていると思います。単体テストでは、すべての外部依存関係をモックし、独自のロジックをテストしてみてください (何が問題になる可能性がありますか?)。コードでそのようにテストできない場合は、変更してください。

于 2013-02-13T14:15:01.210 に答える