Rhino Mocks的意思是“需要返回值还是抛出异常”?

时间:2012-06-12 09:33:07

标签: c# wcf rhino-mocks

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

  

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

我已经用Google搜索并在这里搜索了 - 我能找到的是我需要重新订购各种电话等,但这在我的情况下似乎没有意义吗?也许有人可以向我指出它实际上是

我的测试设置如下所示

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

2 个答案:

答案 0 :(得分:14)

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

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

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

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

答案 1 :(得分:0)

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

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

对我来说,以这种方式进行测试并不会有所作为,但这是另一种情况。