2009-05-23 3 views
3

Справка, может ли кто-нибудь помочь и объяснить цель Rhino Mocks 'Record' scope?Rhino Mocks Record Воспроизведение синтаксиса

Я предположил, что ожидание, установленное в пределах области видимости, будет проверено, но, как только вы создадите макет объекта, Rhino Mocks находится в режиме записи, поэтому я теперь не уверен в цели записи объем.

Вот пример у меня есть:

private static void SomeTest() 
    { 
     MockRepository mockRepository = new MockRepository(); 
     ISomeInterface test = mockRepository.StrictMock<ISomeInterface>(); 

     test.Bar(); 

     using (mockRepository.Record()) 
     { 
      Expect.Call<string>(test.GetFoo()).Return("Hello"); 
     } 

     using (mockRepository.Playback()) 
     { 
      test.GetFoo(); 
     } 
    } 

    public interface ISomeInterface 
    { 
     string GetFoo(); 
     void Bar(); 
    } 

Этот тест потерпит неудачу, потому что есть надежда, что Bar следует. Это потому, что я создал StrictMock, а не Dynamic?

ответ

5

Этот тест потерпит неудачу, потому что нет нет ожидания, что бар() будет называться, но был называется.

Чтобы ответить на ваш вопрос, да, это потому, что у вас строгий макет. Если вы перейдете на DynamicMock, он будет игнорировать все, кроме ожиданий, которые вы фактически установили. Я настоятельно рекомендую использовать DynamicMocks везде, где это возможно, так как StrictMocks на самом деле довольно хрупкие и, как правило, в конечном итоге становятся много хлопот.

Что касается записи/воспроизведения, это не будет автоматически в режиме записи, если вы используете конкретный MockRepository. Это просто характер StrictMock, который ищет все, что называется, которое было вне ожиданий, независимо от того, когда.

+0

Спасибо за помощь. Теперь я понимаю. – 2009-05-24 11:30:47