Я пытаюсь использовать свободно насмешливый стиль 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, Бен
Hi Якоба, Спасибо за ваш ответ! Да, я могу немного изменить свой тест, чтобы удалить выражение лямбда, и это позволяет мне указать логическое возвращаемое значение! Мне все еще интересно узнать, как должен работать метод .Return (Expect.Action), тем более, что я использую Lambda на протяжении моих тестов! Похоже, я должен уметь указывать возвращаемое значение и использовать лямбда, если я полностью не понимаю что-то ... –
Привет, Ben, Вы должны использовать делегат/лямбда в Expect.Call, когда функция издевательства возвращает void. Не имеет смысла использовать выражение lamda и .Return (Expect.Action) вместе. Появляется .Return (Expect.Action), потому что выражение лямбда имеет тип Expect.Action таким же образом. Появляется .Return (bool) при использовании синтаксиса, который я использовал для Expect.Call. –
О, хорошо, это имеет смысл! Спасибо за вашу помощь Якоба. –