次のコードでは、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は失敗します)。