162

より高いレベルのメソッドを呼び出すと、メソッド呼び出しが発生することをテストできると理解しています。つまり、

public abstract class SomeClass()
{    
    public void SomeMehod()
    {
        SomeOtherMethod();
    }

    internal abstract void SomeOtherMethod();
}

私が呼び出すとSomeMethod()、それが呼び出されることを期待してテストしたいと思いSomeOtherMethod()ます。

この種のテストがモック フレームワークで利用できると考えるのは正しいですか?

4

3 に答える 3

187

Verify を使用して、モックしたもののメソッドが呼び出されたかどうかを確認できます。

static void Main(string[] args)
{
        Mock<ITest> mock = new Mock<ITest>();

        ClassBeingTested testedClass = new ClassBeingTested();
        testedClass.WorkMethod(mock.Object);

        mock.Verify(m => m.MethodToCheckIfCalled());
}

class ClassBeingTested
{
    public void WorkMethod(ITest test)
    {
        //test.MethodToCheckIfCalled();
    }
}

public interface ITest
{
    void MethodToCheckIfCalled();
}

行がコメント化されたままになっていると、Verify を呼び出したときに MockException がスローされます。コメントを外せばパスします。

于 2008-12-07T18:49:13.060 に答える
6

いいえ、モック テストでは、特定のテスト可能なデザイン パターンを使用していることを前提としています。その 1 つがインジェクションです。あなたの場合、あなたはテストSomeClass.SomeMethodSomeOtherMethodていて、インターフェースが必要な別のエンティティに実装する必要があります。

コンストラクタSomeclassは次のようになりますNew(ISomeOtherClass)。次に、をモックして、呼び出されるISomeOtherClass期待を設定しSomeOtherMethod、期待を検証します。

于 2011-02-23T22:35:56.737 に答える