2016-12-30 5 views
0

Я новичок, работающий с Rhino Mock, и я получаю эту ошибку, которую я не могу понять, почему. Здесь тестRhino Mock Test Ожидаемый # 1, действительный # 0 - ошибка

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

Мои 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); 
    } 
} 

Я хочу, чтобы проверить GetStudiesByInstallationReference был назван один раз.

Что я делаю не так? ... он должен пройти тест как условие Expect такой же используется в Stub, но я до сих пор получил исключение

Ожидаемое # 1, 0 Actual #.

Кто-нибудь может мне помочь?

Заранее спасибо

+0

В вашем примере кода не указан тип 'repository', поэтому неясно, что это за объект. Обратите внимание, что вы можете устанавливать только ожидания (т. Е. Использовать «Expect()» или «Stub()») на интерфейсах или «виртуальных»/«абстрактных» элементах конкретных классов. –

ответ

0

Я хочу, чтобы проверить GetStudiesByInstallationReference был назван один раз.

GetStudiesByInstallationReference - это тип, а не метод, который вы ожидаете назвать.

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

Эта строка из кода настраивает ожидание на repository издеваться. Он ожидает, что метод Query() вызывается с параметром типа GetStudiesByInstallationReference, который имеет правильный идентификатор ссылки установки в качестве свойства. Если этот метод не вызывается с правильным параметром, вы получите сообщение об ошибке при вызове repository.VerifyAllExpectations().

Похоже, что в вашем тесте отсутствует фактический звонок SUT, т. Е. «Закон» в Arrange/Act/Assert. Проще говоря, вам нужно выполнить какой-то код, который вызовет вызов метода в вашем репозитории, как вы ожидаете (или измените тест).

+0

Спасибо, что ответили на него. Я проверю, что вы сказали с коллегой (которого не было здесь, когда я создавал этот тест) ... он привык использовать Rhino и, вероятно, поможет мне в этом. Самое смешное, когда я меняю порядок «Ожидание» (до «Stub») ... он работает. Я не знаю, имеет ли смысл ... –

Смежные вопросы