Что означает Rhino Mocks под "требует возврата или исключения для броска"?
Когда высмеивается вызов службы WCF, я получаю следующую ошибку:
Метод 'ICustomerEntities.GetCustomerFromPhoneNumber( "01234123123" );' требует возврата или исключения для throw.
Я искал это и искал здесь - все, что я могу найти, это мне нужно переупорядочить различные вызовы и т.д., но это, похоже, не имеет смысла в моей ситуации? Возможно, кто-то может указать мне, что это на самом деле?
Моя тестовая установка выглядит так:
_entities = MockRepository.GenerateStrictMock<ICustomerEntities>();
И метод проверки не работает в третьей строке, установив result2
_entities.Expect(ip => ip.GetCustomerFromPhoneNumber("01234123123"));
var test = MockRepository.GenerateMock<ICustomerEntities>(_factory);
var result2 = _entities.GetCustomerFromPhoneNumber("01234123123");
var result = test.GetAllCustomersWithAGivenPhoneNumber("01234123123");
Assert.AreEqual(result,result2);
Оригинальный вызов пытается издеваться над этим (его в методе GetAllCustomersWithAGivenPhoneNumber
):
using (var entities = _factory.CreateEntities())
{
var customer = entities.GetCustomerFromPhoneNumber(telephoneNumber);
}
Ответы
Ответ 1
Помните, что издевавшийся объект - это просто макет. Реализации вообще не существует, поэтому, если макет должен вернуть значение из функции, у него нет способа узнать, что вернуть, если вы не сообщите об этом.
Я предполагаю, что ваш GetCustomerFromPhoneNumber() возвращает объект или идентификатор клиента, поэтому вам нужно сообщить Rhino, что вернуть:
Я никогда не использовал Rhino, но, надеюсь, это укажет вам в правильном направлении, даже если синтаксис не совсем прав.
var test = MockRepository.GenerateMock<ICustomerEntities>(_factory);
test.Stub(ent => ent.GetCustomerFromPhoneNumber("01234123123")).Return(new Customer());
Ответ 2
Объект _entities является Mock, поэтому он не имеет реализации. Вы должны указать его bahaviour и вернуть значение. Чтобы вернуть значение, необходимо выполнить следующее:
_entities.Stub(x => x.GetCustomerFromPhoneNumber(Arg<string>.Is.Anything)).Returns(*here specify what do You want to return*);
Для меня такие тесты не делают, но это другой случай.