2016-12-30 3 views
0

저는 Rhino Mock에서 일하는 초보자이며 왜이 오류가 발생하는지 이해할 수 없습니다. 여기에 내가 GetStudiesByInstallationReference을 테스트 할Rhino 모의 테스트 예상 # 1, 실제 # 0 - 오류

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

GetStudiesByInstallationReference.cs 한 번 불렀다 내 시험

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

. Expect 절은 Stub에 사용 된 동일로 내가 잘못 뭐하는 거지?

... 그것은 시험을 통과해야하지만, 난 여전히 예외

예상 # 1, 실제 # 0을 얻었다.

아무도 도움이 될 수 없습니까? 사전

+0

코드 샘플에'저장소 '유형이 포함되어 있지 않으므로 그 객체가 무엇인지 분명하지 않습니다. ('Expect()'또는'Stub()')을 인터페이스에 사용하거나 구체적인 클래스의'virtual' /'abstract' 멤버 만 사용할 수 있습니다. –

답변

0

내가 GetStudiesByInstallationReference을 테스트 할 수있는

덕분에 한 번 불렀다.

는 유형이며 예상되는 호출 방법이 아닙니다.

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

코드에서이 줄

repository 모의에 대한 기대를 설정하는 것입니다. 올바른 설치 참조 GUID가 속성 인 GetStudiesByInstallationReference 유형의 매개 변수를 사용하여 Query() 메서드가 호출 될 것으로 예상됩니다. 올바른 매개 변수를 사용하여이 메서드를 호출하지 않으면 repository.VerifyAllExpectations()을 호출 할 때 설명하는 오류가 표시됩니다.

SUT에 대한 실제 전화가 누락되었습니다 (예 : Arrange/Act/Assert). 간단히 말해, 저장소에서 메소드가 예상대로 호출되도록 (또는 테스트를 변경하는) 일부 코드를 실행해야합니다.

+0

답변 해 주셔서 감사합니다. 내가이 시험을 만들 때 동료가 아니었던 동료와 당신이 말한 것을 확인해 볼 것입니다. 그는 Rhino를 사용하여 익숙해 졌을 것입니다. 재미있는 점은,'Expect' ('Stub '이전)의 순서를 바꿀 때 작동한다는 것입니다. 이해가되는지 모르겠다. –

관련 문제