0

私は 100% のコード カバレッジに近づけようとしており、OpenFileDialog のモックに興味があります。いくつかの調査から、 Open File Dialog MVVMの次のコードのように、IFileDialogService を作成するのが適切な答えのようです。

public interface IOpenFileService
{
    string FileName { get; }
    bool OpenFileDialog()
    // Many other methods and properties of OpenFileDialog here...
}

ただし、これは、OpenFileDialog のすべてのプロパティとメソッドを実装し、実際の OpenFileDialog のプロパティとメソッドを呼び出すためのパススルーにする必要があることを意味します。

私は、MockContainer と RealContainer を持つようなことをしたいと思っていました。それぞれが OpenFileDialog のバージョンを返します。

public class MockContainer
{
  IOpenFileDialog FileDialog { get { return new MockOpenFileDialog(); } }
}

public class RealContainer
{
  IOpenFileDialog FileDialog { get { return new OpenFileDialog(); } }
}

ただし、共通のインターフェースを実装していないため、それはできません。このアプローチを採用できれば、OpenFileDialog で必要なすべてのものに対して、IOpenFileService でパススルー メソッドを作成する必要はありません。各コンテナーは、呼び出し元が使用できるダイアログを返すだけです。

そのアプローチを機能させる方法はありますか、それとも IOpenFileService が本当にそれを行う方法ですか?

注: フレームワークのモックについては知っています。今日は何かをすぐに実装したかったので、まだモック フレームワークを学習する時間は取りたくありませんでした。私はそれを自分でかなり簡単に嘲笑できると考えました。

4

1 に答える 1

1

これはAdapter パターンの純粋なケースです

あなたは非常に近かったです(必要な最後のステップは、いくつかの基本インターフェースから両方MockContainerを継承することです-次のように:RealContainer

public class MockContainer : IOpenFileDialog 
{
    IOpenFileDialog FileDialog { get { return this; } }
}

public class RealContainer : IOpenFileDialog 
{
    IOpenFileDialog FileDialog { get { return this; } }
}

そして、それらをIOpenFileDialogオブジェクトとしてモックします

于 2012-06-17T19:47:11.627 に答える