必要に応じて System.Windows.Forms.Form クラスに結合されているメソッドの単体テストに成功した人はいますか?
私は最近、C# winforms アプリケーションに取り組んでおり、MVC 構造でビルドしようとしています。フレームワークが実際にこれを念頭に置いて構築されていないことを考えると、これは十分に困難です。
ただし、単体テストをミックスに投入すると、さらに難しくなります。単体テストにスタブ/モックを使用できるように、コントローラーが具体的なビュー クラスに結合されていないことを確認してきました。ただし、どこかでForm クラスを参照することは避けられず、これらのメソッドをテストする必要があります。
私がMoqを使っているのは、Moqには優れた型安全機能があり、具体的な型をモックできるからです。しかし残念ながら、仮想でも抽象でもない具象型のメソッドまたはプロパティへの呼び出しを「期待」することはできません。Form クラスはサブクラス化を考慮して作成されていないため、これは大きな問題です。たとえば、ShowDialog を「期待」して、実際のウィンドウが作成されないように Form クラスをモックできるようにする必要があります。
そのため、フォームのサブクラスと多くのやり取りを行う単体テストを実行できません。これは私のビューです。
このタイプのコードの単体テストに成功した人はいますか? どうやってそれをしましたか?
これは、他のモッキング フレームワークで回避できるものですか? 他のモッキング フレームワークで使用される文字列ベースのメソッドは、同じ制約を受けますか? 独自の明示的なロングハンド モック クラスを記述できますか?それとも、仮想メンバーがないために、ウィンドウの動作をそのように抑制することができなくなりますか?
または、フォームに結合されたコードが単純な複雑さのメソッドとクラスになるように、クラスを構造化するために考えていなかった方法がありますか?それのための?