2009-06-19 9 views
1

J'ai une usine qui crée des objets de travail sous la forme de ijobRhino Mocks - Mocking une usine

Public Interface IJobFactory 
    Function CreateJobs(ByVal cacheTypes As CacheTypes) As IEnumerable(Of IJob) 
End Interface 

Le ijob d'interface définit trois choses

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

Je suis en train de tester le consommateur l'usine, une classe appelée JobManager. Le gestionnaire de travaux appelle IJobFactory et demande la collection de IJobs. Je peux très bien le faire mais je ne peux pas varier la taille de la collection sans beaucoup de travail.

Existe-t-il un moyen simple de remplacer la collection pour que je récupère une plage?

Comment puis-je créer un talon de IJobFactory.CreateJobs de telle sorte que je récupère une collection de bouts d'IJob, disons 5 ou alors où l'Id de chacun des bouts d'IJob est différent. Les identifiants pourraient être 1 à 5 et cela fonctionnerait bien.

Répondre

1

je ferais créer une fonction d'aide pour définir les attentes sur l'usine (notation C#, non testé):

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; 
} 

et appeler cette fonction lorsque vous définissez l'attente au début du test. Vous devriez probablement passer cacheTypes à cette méthode aussi.