在Expect.Call中设置对象的属性

时间:2010-12-08 12:15:45

标签: rhino-mocks

要解释我正在寻找的内容有点难,但我的例子应该澄清一下。

我有下一个代码:

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

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

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

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

假设有一个类使用方法保存:

public void Create(实体实体) {     //实体保存到数据库     //entity.id使用数据库中创建的id进行更新 }

因此,在创建之前,entity.id为-1,在创建之后它是> 0

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

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

1 个答案:

答案 0 :(得分:3)

没有。如果你没有嘲笑_scheduleRepository,犀牛模拟不知道它。你为什么不想嘲笑_scheduleRepository

编辑:好的,现在我明白了你想做什么。使用“WhenCalled”扩展方法定义Rhino.Mocks拦截调用时要执行的代码。这样的事情应该有效:

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