【问题标题】:What does Rhino Mocks mean by "requires a return value or an exception to throw"?Rhino Mocks 的“需要返回值或抛出异常”是什么意思?
【发布时间】:2012-06-12 09:33:06
【问题描述】:

模拟对 WCF 服务的调用时,我收到以下错误:

方法'ICustomerEntities.GetCustomerFromPhoneNumber("01234123123");'需要返回值或抛出异常。

我已经用谷歌搜索了这个并在这里搜索 - 我只能找到我需要重新排序各种呼叫等,但这在我的情况下似乎没有意义?也许有人可以向我指出它实际上确实?

我的测试设置如下所示

_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);
}

【问题讨论】:

    标签: c# wcf rhino-mocks


    【解决方案1】:

    请记住,模拟对象就是这样,一个模拟。根本没有实现,所以如果 mock 需要从函数返回一个值,除非你告诉它,否则它无法知道返回什么。

    我假设您的 GetCustomerFromPhoneNumber() 返回一个客户对象或 id,所以您需要告诉 Rhino 要返回什么:

    我从未使用过 Rhino,但希望即使语法不完全正确,这也会为您指明正确的方向。

    var test = MockRepository.GenerateMock<ICustomerEntities>(_factory);
    test.Stub(ent => ent.GetCustomerFromPhoneNumber("01234123123")).Return(new Customer());
    

    【讨论】:

    • 对我来说同样的问题...忘记了 Return()。有道理。
    【解决方案2】:

    您的 _entities 对象是 Mock,因此它没有实现。您必须指定它的行为和返回值。要存根返回值您必须执行以下操作:

    _entities.Stub(x => x.GetCustomerFromPhoneNumber(Arg<string>.Is.Anything)).Returns(*here specify what do You want to return*);
    

    对我来说,以这种方式进行测试没有任何意义,但这是另一种情况。

    【讨论】:

      猜你喜欢
      • 2011-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-14
      • 2011-01-04
      • 2011-01-01
      相关资源
      最近更新 更多