0

我已经开始学习 Rhino Mocks 并且能够按照在线 wiki 中的示例进行操作。我以为我会将这些知识应用到我的一个家庭项目中,但在与技术抗争了数小时后,我陷入了困境。这是我正在尝试做的事情(如果我没有提供足够的信息,请告诉我——我不想只是做一个巨大的代码转储):

我有一个名为DataSurface的类。

它有一个名为unitOfWork的成员,它又包含三个存储库TaskRepositoryWorkRepositoryProjectRepository。每个都作为 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 都会抛出错误。

有没有测试专家可以让我直截了当。

干杯!

4

1 回答 1

0

您需要通过接口抽象所有类,然后才能模拟任何东西,是的,您可以深入模拟 N 级。

顺便说一句,你是以某种方式unitOfWork注入到DataStructure类中还是在类中显式地实例化它?为了能够模拟它,您需要将其注入,通常这是经验法则 - 注入依赖项而不是在类中实例化它。

于 2012-07-13T12:04:58.770 回答