Rhino Mocks - издевается над фабрикой - PullRequest
1 голос
/ 19 июня 2009

У меня есть фабрика, которая создает рабочие задания в форме 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 или около того, где Id каждой заглушки IJob отличается. Идентификаторы могут быть от 1 до 5, и это будет отлично работать.

1 Ответ

1 голос
/ 01 июля 2009

Я бы создал вспомогательную функцию для установки ожиданий на заводе (нотация 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 и этому методу.

...