我已经开始学习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 的查找方法。
因为存储库是“2类深”,即成员内部的成员与 InsertNewWorkItem 方法相对,所以我似乎根本无法创建存储库模拟对象。
我觉得我要做的就是反模式。
我也意识到代码可能不是可模仿的。我尝试了在单元工作中实例化存储库的每个组合(例如构造函数DI),但每次,Rhino Mocks都会抛出错误。
是否有任何测试专家可以帮助我。
干杯!
答案 0 :(得分:0)
你需要通过接口抽象所有类,然后你可以模拟任何东西,是的,你可以模拟N级深层次。
顺便说一句,您是否以某种方式unitOfWork
注入DataStructure
类或明确地在类中实例化它?为了能够模拟它你需要注入它,通常这是经验法则 - 注入依赖关系而不是在类中实例化它。