2010-05-17 3 views
1

Я пытаюсь использовать свободно насмешливый стиль Rhino.Mocks и имеет следующий код, который работает на макете IDictionary объекта под названием «фабрика»:Rhino Mocks - свободный Mocking - Expect.Call вопрос

With.Mocks(_Repository).Expecting(() => 
     { 
      Expect.Call(() => factories.ContainsKey(Arg<String>.Is.Anything)); 
      LastCall.Return(false); 

      Expect.Call(() => factories.Add(Arg<String>.Is.Anything, Arg<Object>.Is.Anything)); 
     }).Verify(() => 
     { 
      _Service = new ObjectRequestService(factories); 
      _Service.RegisterObjectFactory(Valid_Factory_Key, factory); 
     }); 

Теперь единственным способом, которым я смог установить возвращаемое значение вызова ContainsKey, является использование LastCall.Return (true) в следующей строке.

Я уверен, что я смешиваю стили здесь, поскольку Expect.Call() имеет метод .Return (Expect.Action), но я не могу понять, как я должен правильно его использовать, чтобы возвращать логическое значение ?

Может ли кто-нибудь помочь? Надеюсь, что вопрос достаточно ясен - дайте мне знать, если кому-то нужна дополнительная информация!

Cheers, Бен

ответ

3

Я считаю, что следующая строка даст вам хочу, чтобы вы хотите:

Expect.Call(factories.ContainsKey(Arg<string>.Is.Anything)).Return(false); 
+0

Hi Якоба, Спасибо за ваш ответ! Да, я могу немного изменить свой тест, чтобы удалить выражение лямбда, и это позволяет мне указать логическое возвращаемое значение! Мне все еще интересно узнать, как должен работать метод .Return (Expect.Action), тем более, что я использую Lambda на протяжении моих тестов! Похоже, я должен уметь указывать возвращаемое значение и использовать лямбда, если я полностью не понимаю что-то ... –

+0

Привет, Ben, Вы должны использовать делегат/лямбда в Expect.Call, когда функция издевательства возвращает void. Не имеет смысла использовать выражение lamda и .Return (Expect.Action) вместе. Появляется .Return (Expect.Action), потому что выражение лямбда имеет тип Expect.Action таким же образом. Появляется .Return (bool) при использовании синтаксиса, который я использовал для Expect.Call. –

+0

О, хорошо, это имеет смысл! Спасибо за вашу помощь Якоба. –

Смежные вопросы