1

次のコードでは、Test1は成功しますが、Test2は失敗します。

protected Mock<IMyInterface> MyMock { get; set; }

[SetUp]
public virtual void  Initialize()
{
    MyMock = new Mock<IMyInterface>();
}

[Test]
void Test1()
{
    // ... code that causes IMyIntervace.myMethod to be called once

    MyMock.Verify(x=> x.myMethod(), Times.Once());
}

[Test]
void Test2()
{
    MyMock.Verify(x=> x.myMethod(), Times.Once());
}

この動作は実際には非常に便利ですが、なぜこのように機能するのか理解できません。Test2も成功するはずです!

私が持っている唯一のアイデアは、どういうわけか、Verifyは「myMethod」が別のテストケースから呼び出されたことを知るのに十分賢いので、「カウントされない」ということです。

ところで、Test1でVerifyの呼び出しを削除しても、同じことが起こります(Test2は失敗します)。

4

1 に答える 1

6

SetUpメソッドはすべてのテストの前に実行されるため、Test2の前にモックを再作成します。

Test2では、何もしていないため、検証は失敗します。MyMethodが呼び出されたかどうかを確認しようとしていますが、呼び出されていません。だから、失敗します。

モックを1回だけ作成する場合は、を使用する必要があります[TestFixtureSetUp]

于 2009-07-28T22:10:23.237 に答える