要解释我正在寻找的内容有点难,但我的例子应该澄清一下。
我有下一个代码:
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更新为给定的整数。这可能吗?
答案 0 :(得分:3)
没有。如果你没有嘲笑_scheduleRepository
,犀牛模拟不知道它。你为什么不想嘲笑_scheduleRepository
?
编辑:好的,现在我明白了你想做什么。使用“WhenCalled”扩展方法定义Rhino.Mocks拦截调用时要执行的代码。这样的事情应该有效:
_scheduleRepository.Expect(s => s.Save(schedule)).WhenCalled(a => ((Schedule) a.Arguments[0]).Id = 1);