犀牛嘲笑 - 嘲弄工厂

时间:2009-06-19 15:47:39

标签: rhino-mocks range collections

我有一个以IJob

形式创建作业对象的工厂
Public Interface IJobFactory
    Function CreateJobs(ByVal cacheTypes As CacheTypes) As IEnumerable(Of IJob)
End Interface

界面IJob定义了三件事

Public Interface IJob
    Sub Execute()
    ReadOnly Property Id() As Integer
    ReadOnly Property JobType() As JobType
End Interface

我正在尝试测试工厂的消费者,这是一个名为JobManager的类。工作经理打电话给IJobFactory并要求收集IJobs。我可以把它弄得很好,但是如果没有大量工作我就无法改变收藏规模。

是否有一种简单的方法来收集集合以便我获得范围?

如何以这样的方式创建IJobFactory.CreateJobs的存根,以便返回IJob存根的集合,比如5个左右,其中每个IJob存根的Id都不同。 ids可以是1到5,这将很有效。

1 个答案:

答案 0 :(得分:1)

我会创建一个辅助函数来设置工厂的期望值(c#表示法,未经测试):

private List<IJob> SetExpectedJobs(MockRepository mocks, IJobFactory factory, int n)
{
    List<IJob> result = new List<IJob>();
    for(int i=1; i<=n; i++)
    {
        IJob job = mocks.CreateStub<IJob>();
        Expect.Call(job.Id).Return(i).Repeat.Any();
        result.Add(job);
    }
    Expect.Call(factory.CreateJobs(null)).Return(result).IgnoreArguments();
    return result;
}

并在测试开始时设置期望时调用此函数。您也可以将cacheTypes传递给此方法。