Странное поведение в методе Verify в Moq

В следующем коде 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» был вызван из другого тестового примера, и поэтому он «не считается»?

Кстати, даже если я удалю вызов Verify в Test1, произойдет то же самое (Test2 не пройден).


person JoelFan    schedule 28.07.2009    source источник


Ответы (1)


Ваш метод SetUp запускается перед каждым тестом, поэтому он воссоздает ваш макет перед Test2.

В Test2 вы ничего не сделали, поэтому ваша проверка не удалась. Вы пытаетесь проверить, был ли вызван MyMethod, но это не так. Итак, провал.

Если вы пытаетесь создать макет только один раз, вам нужно использовать [TestFixtureSetUp].

person womp    schedule 28.07.2009
comment
+1. Я бы не советовал создавать макет для проверки в TestFixtureSetUp. - person TrueWill; 02.05.2011