我已经开始学习 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 都会抛出错误。
有没有测试专家可以让我直截了当。
干杯!