2016-12-30 4 views
0

Je suis débutant de travail avec Rhino Mock et je reçois cette erreur que je ne peux pas comprendre pourquoi. Voici le testRhino Mock Test Prévu # 1, Réel # 0 - erreur

public void TestGet() 
{ 
    var installationReference = new Guid("21D7D135-6E9E-4F92-8313-873CA3ABDCD8"); 
    var study = MockRepository.GenerateMock<IStudy>(); 
    var installation = MockRepository.GenerateMock<IInstallation>(); 
    var license = MockRepository.GenerateMock<ILicense>(); 
    var participant = MockRepository.GenerateMock<IStudyParticipant>(); 
    var clinicalPartner = MockRepository.GenerateMock<IClinicalPartner>(); 

    clinicalPartner.Stub(c => c.FirstName).Return("John"); 
    clinicalPartner.Stub(c => c.LastName).Return("Doe"); 
    installation.Stub(i => i.Reference).Return(installationReference); 
    license.Stub(l => l.Installations).Return(new List<IInstallation> { installation }); 
    participant.Stub(p => p.Licenses).Return(new List<ILicense> { license }); 
    participant.Stub(p => p.ClinicalPartner).Return(clinicalPartner); 
    participant.Stub(p => p.ClinicalPartnerStatus).Return(ClinicalPartnerStatus.Active); 

    study.Stub(s => s.Description).Return("Test WebAPI"); 
    study.Stub(s => s.Participants).Return(new List<IStudyParticipant> { participant }); 

    repository.Stub(r => r.Query(Arg<GetStudiesByInstallationReference>.Matches(s => s.InstallationReference.Equals(installationReference)))) 
     .Return(new DummyResult<IStudy>(study)); 
    repository.Expect(r => r.Query(Arg<GetStudiesByInstallationReference>.Matches(s => s.InstallationReference.Equals(installationReference)))).Return(new DummyResult<IStudy>(study)).Repeat.Once(); 
    repository.VerifyAllExpectations(); 
} 

Mon GetStudiesByInstallationReference.cs

public class GetStudiesByInstallationReference : IQuery<IStudy> 
{ 
    public Guid InstallationReference { get; set; } 

    public GetStudiesByInstallationReference(Guid installationReference) 
    { 
     InstallationReference = installationReference; 
    } 

    public IQueryResult<IStudy> Execute(ISession session) 
    { 
     var criteria = session.CreateCriteria<IStudy>(); 
     criteria.CreateAlias("participants", "p"); 
     criteria.CreateAlias("p.licenses", "l"); 
     criteria.CreateAlias("l.installations", "i"); 
     criteria.Add(Restrictions.Eq("i.Reference", InstallationReference)); 
     criteria.Add(Restrictions.Eq("Status", StudyStatus.Approved)); 
     criteria.Add(Restrictions.Eq("p.ClinicalPartnerStatus", ClinicalPartnerStatus.Active)); 
     criteria.Add(Restrictions.Le("StartDate", DateTime.Now)); 
     criteria.Add(Restrictions.Or(
      Restrictions.IsNull("EndDate"), 
      Restrictions.Gt("EndDate", DateTime.Now))); 

     return new CriteriaResult<IStudy>(criteria); 
    } 
} 

Je veux tester GetStudiesByInstallationReference a été appelé une fois.

Qu'est-ce que je fais mal? ... il devrait passer le test comme Expect clause est le même utilisé dans le Stub mais j'ai toujours eu l'exception

attendu # 1, # 0 réelle.

Quelqu'un pourrait m'aider avec ça?

Merci à l'avance

+0

Votre exemple de code n'inclut pas le type de 'repository', donc l'objet n'est pas clair. Notez que vous ne pouvez définir que des attentes (c'est-à-dire: utiliser 'Expect()' ou 'Stub()') sur des Interfaces ou des membres 'virtual' /' abstract' de classes concrètes. –

Répondre

0

Je veux tester GetStudiesByInstallationReference a été appelé une fois.

GetStudiesByInstallationReference est un type, et non une méthode que vous prévoyez d'appeler.

repository 
    .Expect(r => r.Query(Arg<GetStudiesByInstallationReference>.Matches(s => s.InstallationReference.Equals(installationReference)))) 
    .Return(new DummyResult<IStudy>(study)).Repeat.Once(); 

Cette ligne de votre code est la mise en place d'une attente sur la maquette repository. Il s'attend à ce que la méthode Query() soit appelée avec un paramètre de type GetStudiesByInstallationReference qui possède le GUID de référence d'installation correct en tant que propriété. Si cette méthode n'est pas appelée avec le paramètre correct, vous obtiendrez l'erreur que vous décrivez en appelant repository.VerifyAllExpectations().

Il semble que votre appel ne porte pas l'appel réel au SUT, c'est-à-dire le "Act" au Arrange/Act/Assert. Autrement dit, vous devez exécuter du code qui provoquera l'appel de la méthode sur votre référentiel comme prévu (ou modifier le test).

+0

Merci d'avoir répondu. Je vais vérifier ce que vous avez dit avec un collègue (qui n'était pas là quand j'ai créé ce test) ... il a l'habitude d'utiliser Rhino et va probablement m'aider avec ça. La chose amusante est, quand je change l'ordre de 'Expect' (avant le' Stub') ... cela fonctionne. Je ne sais pas si c'est logique ... –