0

私は Rhino Mock で作業している初心者ですが、理由が理解できないこのエラーが発生しています。ここでテスト

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。

誰でもこれで私を助けることができますか?

前もって感謝します

4

1 に答える 1

0

GetStudiesByInstallationReference が 1 回呼び出されたことをテストしたい。

GetStudiesByInstallationReferenceは型であり、呼び出されると予想されるメソッドではありません。

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

repositoryコードのこの行は、モックに期待を設定しています。プロパティとして正しいインストール参照 GUID を持つQuery()型のパラメーターでメソッドが呼び出されることを想定しています。GetStudiesByInstallationReferenceこのメソッドが正しいパラメーターで呼び出されない場合、呼び出し時に説明したエラーが発生しますrepository.VerifyAllExpectations()

テストにSUTへの実際の呼び出し、つまりArrange/Act/Assertの「Act」が欠けているようです。簡単に言えば、リポジトリのメソッドが期待どおりに呼び出されるようにする (またはテストを変更する) コードを実行する必要があります。

于 2016-12-30T19:02:39.590 に答える