【问题标题】:Set a property of an object in a Expect.Call在 Expect.Call 中设置对象的属性
【发布时间】:2010-12-23 16:45:27
【问题描述】:

解释我要搜索的内容有点困难,但我的示例应该可以说明这一点。

我有下一个代码:

var schedule = ScheduleUtil.CreateScheduleDto(user, user);
Expect.Call(() => _scheduleRepository.Save(schedule));

现在,我想做的是,当进行此 Save 调用时,应该将 schedule.id 属性设置为另一个值(例如 1)。

我不想模拟日程安排。这可以做到吗? Save 方法不返回值,所以这是不可能的,但我确实希望修改对象计划。

更新:也许一个小例子可以说明我到底想要什么。

假设有一个类带有 Save 方法:

公共无效创建(实体实体) { //实体保存到数据库 //entity.id 用数据库中创建的 id 更新 }

所以,在创建之前,entity.id 是-1,在创建之后是> 0。

现在,有一个使用这个 Create 的服务。该服务方法的代码契约规定,在调用之前,实体的 id 必须等于 -1,在调用之后,它的 id 必须 > 0(前置条件和后置条件)。

所以,我需要的是这样的: var 实体 = 新实体(); //id == -1 Expect.Call(() => _instance.Create(entity);
//现在 entity.id 应该是一个大于 0 的随机数。这就是我需要的,让 Rhino Mocks 将实体的 id 更新为给定的整数。这可能吗?

【问题讨论】:

    标签: rhino-mocks


    【解决方案1】:

    没有。如果你不是在嘲笑_scheduleRepository,Rhino Mocks 是不知道的。为什么不想模拟_scheduleRepository

    编辑:好的,现在我知道你想做什么了。使用“WhenCalled”扩展方法来定义当 Rhino.Mocks 拦截调用时要执行的代码。像这样的东西应该可以工作:

    _scheduleRepository.Expect(s => s.Save(schedule)).WhenCalled(a => ((Schedule) a.Arguments[0]).Id = 1);
    

    【讨论】:

    • 我在嘲笑 _scheduleRepository。但是当我调用 Save(schedule) 时,我还希望 Rhino Mocks 更改日程的 id。
    • 我添加了一个小例子来说明我需要什么。
    • @Lieven 如果您可以模拟“_instance”变量并且“Create”方法是虚拟的,则可以使用我上面显示的期望将实体的 ID 设置为您想要的任何内容。我不清楚为什么这不起作用。
    • 啊,非常抱歉,我没有看到您的编辑。谢谢。当然,这正是我想要的。
    猜你喜欢
    • 1970-01-01
    • 2013-10-03
    • 2013-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-02
    • 2020-10-03
    • 2016-10-27
    相关资源
    最近更新 更多