CRM 2011でプラグインをデバッグしようとすると、非常に困難になる可能性があります。.pdbファイルをサーバー上の正しい場所に配置することには問題があるだけでなく、コーディングを変更するたびに、プラグインをデプロイして再登録するという面倒な作業を経験することになります。トリガーはCRM自体にあるため、その単体テストを作成するのは困難です。
新しいプラグインの単体テストを作成する現在のプロセスはかなり遅く、エラーが発生しますが、次のようになります。
- SDKプラグイン登録ツールを使用して新しいプラグインを登録します
- プラグインコードにブレークポイントを設定して、デバッガーをw3wp.exeに接続します。
- 実行するように登録されているアクションを介してプラグインをトリガーします。
- ブレークポイントに到達すると、パイプラインのプリイメージ、ポストイメージ、およびターゲット値をXMLファイルにシリアル化し、これが単体テストへの入力になります。
- デバッグを停止し、RhinoMocksを使用してPluginExecutionContextとServiceProviderをモックし、シリアル化されたXMLファイルを入力パラメーターのスタブとしてロードして、新しい単体テストを作成します。
- 各単体テストの開始時と終了時に実行されるメソッドを作成し、単体テストで処理するダミーデータをリセット(最初に削除を試みてから追加)し、テストの終了時にダミーデータを削除します。
- シリアル化されたファイルを編集してダミーデータを参照し、プラグインが実行されるたびにまったく同じデータに対して機能することを確認できるようにします。
- 単体テストでプラグインを宣言してインスタンス化し、モックオブジェクトを渡します
- プラグインを実行し、追加のクエリを実行して、プラグインが期待どおりの作業を実行したことを確認します。失敗時にアサートします。
これはやるのが面倒です。画像を正しく取得することから、ダミーデータを作成し、テストを実行するたびにリセットすることまで、改善の余地はたくさんあるようです。
プラグインをCRMから実際にトリガーすることなく、または最初にCRMでプラグインをデバッグし、テストごとに一意のダミーデータを作成するというすべてのフープラを実行せずに、プラグインを単体テストするにはどうすればよいですか?インジェクションを使用して、単体テストごとにCRMのデータを削除、作成、テスト、検証、および削除する必要をなくすにはどうすればよいですか?
2016年の更新
この質問はまだかなりの数のヒットを得ているので、ユニットテスト用の偽のCRMインスタンスを提供する2つの(私が知っている)オープンソースプロジェクトを追加すると思いました。
- FakeXrmEasy -Jordiによって作成されました(以下の回答を参照)
- 主に偽のCRMサービス
- プラグイン/ワークフローの偽造のサポート
- FakeItEasyへの依存
- 素晴らしいドキュメント
- XrmUnitTest-自分で作成
- 偽のCRMサービスなど(前提条件、エンティティビルダーなど)
- プラグイン/ワークフローフェイキングの流暢なサポート
- モックフレームワークへの依存なし
- Sucky Documentation(私はそれに取り組んでいます)
違いを比較対照するために私が作成したこのビデオをチェックしてください。