何時間にもわたる闘争の末、ようやく希望のプロジェクトにテストを実装することができました。Prism 複合アプリケーションでの Pex と Moles (CodeContracts も使用しており、それをお勧めしますが、ここでは発生しません) の経験について詳しく説明します。
- 主に、.Net フレームワークのクラスとインターフェイス、および Prism のクラスとインターフェイスです。それらは、低レベル (システム) と依存性注入 (Prism) のため、計測が容易ではありません。
- 私が最初にしたことは、プロジェクトで初めて Pex を実行してエラーを表示することでした。そこで、Pex に生成を依頼したところ、成功したテストが見つかりました。Pex 参照を含むテスト プロジェクトが自動的に作成されます。
- そこで、どのクラスとインターフェイスをスタブ化する必要があるかを特定しました。これは主に、IEventAggregator や IRegionManager などの Prism インターフェイスに関係しています。これらのインターフェースには実装があり、Moles によってスタブ化できます。必要なのは、Prism リファレンス (プロジェクト リファレンス内) を右クリックし、[Add mols for Prism ] をクリックするだけです。次の探索で Pex によって自動的に使用される、すべての Prism クラスのスタブを含むアセンブリを自動生成します。このツールには注意してください。私の最初の反応は、すべて (プリズム、システム、依存関係など) を「ほくろ」にすることでした。これは、テスト プロジェクトの死です。ほくろ集合体を抑制する方法がわかりませんでした。だから出来上がったら完成!
- 依存関係を部分的に「ほくろ」にして、それを行う前に考えることをお勧めします。基礎となるパラメーターのインスタンス化が正しくないために、Pex でオブジェクトを作成できない場合があり、objecg の作成が失敗します (Pex レポートには、実装の欠如と下位レベルでのエラーの違いは示されません。常に次のように表示されます: " MyClassオブジェクトを作成できませんでした」とファクトリの作成を提案します)
- Moles でスタブできないクラスのファクトリを作成しました。特に、イベント アグリゲーター (CompositionPresentationEvent から継承) を使用するイベントでは機能しません。
- 我慢して解決してください。Pex はまだ実験的であり、「後戻りできない」と思います。反抗的なエラー メッセージを解決する最善の方法は、テスト プロジェクトを削除し、pex の探索からやり直すことでした。
誰かが私の答えを手伝って、詳細と修正を与えることができれば、それは大歓迎です!