9

クラスがあります

public interface IMyInterface 
{
    string MethodA();
    void MethodB();
}

public class MyClass : IMyInterface
{
    public string MethodA()
    {
        // Do something important
    }

    public void MethodB()
    {
        string value = MethodA();
        // Do something important
    }
}

MethodAMethodBの単体テストをしたいのですが、Moqを使用するように呼びかけながら、モックを作成する方法を考えるのに苦労しMethodBています。Moqはクラスではなくインターフェースをモックするので、私はただ呼び出すことはできませんmock.Object.MethodB()よね?

これは可能ですか?もしそうなら、どのように?

4

2 に答える 2

4

それは不可能だと思います。それは可能ですが、私はそれをしたくないのです。

あなたはの動作をテストしていますがMyClass、それがたまたま実装されているという事実はIMyInterface 、MethodAおよびMethodBの動作のテストとは多少関係がありません。必要に応じて、クラスが実装する予定のインターフェイスを実装していることを確認する個別のテストを行うことができます。MyClass.MethodBのテストは、セミモックオブジェクトではなく、MyClassのインスタンスで実行する必要があります。

MethodAの動作が依存関係であると思われる場合は、実際にクラスから明示的に抽出してみてください。これにより、MethodA(単に依存関係に委任する)とMethodB(依存関係を使用してさらに多くのことを行う)の両方をテストできます。

于 2012-07-28T00:45:51.637 に答える
1

簡単に(またはすべて)インスタンス化できないモック依存関係。
MyClassはテスト中のクラスであるため、モックしないでください(モックされた値をテストする必要はありません)。
ただし、インターフェイスを実装し、このプロパティを使用するMyClass.Fooクラスであるプロパティがある場合は、それをモックして依存関係を壊すことができます。FooIFooMethodAFoo

于 2012-07-30T16:07:52.253 に答える