2016-12-30 4 views
0

Ich bin ein Neuling, der mit Rhino Mock arbeitet und ich bekomme diesen Fehler, den ich nicht verstehen kann, warum. Hier ist der TestRhino Mock Test Erwartet # 1, Aktuell # 0 - Fehler

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

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

Ich möchte GetStudiesByInstallationReference testen, wurde einmal genannt.

Was mache ich falsch? ... sollte es den Test bestehen, wie die Expect Klausel das gleiche in der Stub verwendet wird, aber ich habe immer noch die Ausnahme

Erwartete # 1, Actual # 0.

Jeder könnte mir dabei helfen?

Vielen Dank im Voraus

+0

Ihr Codebeispiel enthält nicht den Typ von 'repository', daher ist nicht klar, was dieses Objekt ist. Beachten Sie, dass Sie nur Erwartungen setzen können (zB: expect() 'oder' Stub() ') für Interfaces oder' virtuelle'/'abstrakte' Member von konkreten Klassen. –

Antwort

0

Ich möchte GetStudiesByInstallationReference testen, wurde einmal genannt.

GetStudiesByInstallationReference ist ein Typ und keine Methode, von der Sie erwarten, dass sie aufgerufen wird.

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

Diese Zeile aus dem Code setzt eine Erwartung auf der repository Mock-up. Er erwartet, dass die Query()-Methode mit einem Parameter vom Typ GetStudiesByInstallationReference aufgerufen wird, der über die richtige Installationsreferenz-GUID als Eigenschaft verfügt. Wenn diese Methode nicht mit dem richtigen Parameter aufgerufen wird, erhalten Sie den Fehler, den Sie beim Aufruf von repository.VerifyAllExpectations() beschreiben.

Es sieht aus wie Ihr Test fehlt der eigentliche Anruf an die SUT, d. H. Die "Act" in Arrange/Act/Assert. Einfach ausgedrückt, müssen Sie einen Code ausführen, der dazu führt, dass die Methode in Ihrem Repository wie erwartet aufgerufen wird (oder den Test ändert).

+0

Vielen Dank für Ihre Antwort. Ich überprüfe, was du mit einem Kollegen gesagt hast (der war nicht hier, als ich diesen Test erstellt habe) ... er benutzt Rhino und wird mir wahrscheinlich dabei helfen. Das Lustige ist, wenn ich die Reihenfolge von 'Expect' ändere (vor dem' Stub') ... funktioniert es. Ich weiß nicht, ob es Sinn macht ... –

Verwandte Themen