【发布时间】:2012-07-13 10:26:37
【问题描述】:
我已经开始学习 Rhino Mocks 并且能够按照在线 wiki 中的示例进行操作。我以为我会将这些知识应用到我的一个家庭项目中,但在与技术抗争了数小时后,我陷入了困境。这是我正在尝试做的事情(如果我没有提供足够的信息,请告诉我——我不想只是做一个巨大的代码转储):
我有一个名为 DataSurface 的类。
它有一个名为unitOfWork的成员,它又包含三个存储库TaskRepository、WorkRepository和ProjectRepository。每个都作为 Getter 属性公开。
DataSurface 中有一个 InsertNewWorkItem 方法,它调用 TaskRepository 上的 Find 方法,如下所示:
public void InsertNewWorkItem(Entities.Work workItem)
{
var taskForWorkItem = this.unitOfWork.TaskRepositoryInstance.Find(t => t.ID == workItem.TaskId).First();
Work newWorkItem = new Work
{
DateOfWork = workItem.DateOfWork,
Description = workItem.Description,
Duration = workItem.Duration,
Task1 = taskForWorkItem,
Week = workItem.WeekNumber,
};
this.unitOfWork.WorkRepositoryInstance.Add(newWorkItem);
this.unitOfWork.WorkRepositoryInstance.SaveChanges();
}
我希望验证的是 TaskRepository 的 Find 方法已被调用。
因为存储库是“2 类深度”,即成员中的成员相对于 InsertNewWorkItem 方法,我似乎根本无法创建存储库模拟对象。
我觉得我正在尝试做的是一种反模式。
我也意识到代码可能不是可模拟的,因为它是。我尝试了在 unitofwork 中实例化存储库的每种组合(例如构造函数 DI),但每次,Rhino Mocks 都会抛出错误。
有没有测试专家可以帮我弄清楚。
干杯!
【问题讨论】:
标签: unit-testing mocking rhino-mocks rhino-mocks-3.5