Rhino Mocks 所说的“需要抛出返回值或异常”是什么意思?
本文关键字:异常 返回值 是什么 意思 Mocks Rhino | 更新日期: 2023-09-27 18:36:49
模拟对 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);
}
记住,一个模拟的对象就是一个模拟。根本没有实现,所以如果模拟需要从函数返回一个值,除非你告诉它,否则它无法知道要返回什么。
我假设你的 GetCustomerFromPhoneNumber() 返回一个 Customer 对象或 ID,所以你需要告诉 Rhino 要返回什么:
我从未使用过 Rhino,但希望这会为您指明正确的方向,即使语法不太正确。
var test = MockRepository.GenerateMock<ICustomerEntities>(_factory);
test.Stub(ent => ent.GetCustomerFromPhoneNumber("01234123123")).Return(new Customer());
你的_entities对象是 Mock,所以它没有实现。您必须指定它是巴哈维和返回值。要存根返回值,您必须执行以下操作:
_entities.Stub(x => x.GetCustomerFromPhoneNumber(Arg<string>.Is.Anything)).Returns(*here specify what do You want to return*);
对我来说,以这种方式进行测试并不有意义,但这是另一种情况。