Подтвердить что ты не робот

Что означает 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);
}
4b9b3361

Ответ 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*);

Для меня такие тесты не делают, но это другой случай.