2016-12-30 4 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は1時間と呼ばれた私のテスト

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

コードサンプルには 'repository'の型が含まれていないので、そのオブジェクトが何であるかはわかりません。期待値を設定することができます(つまり、Interfaces上の 'Expect()'や 'Stub()')、または具象クラスの 'virtual' /' abstract'メンバーだけを使用できます。 –

答えて

0

私はGetStudiesByInstallationReferenceをテストしたいにおける

おかげで1時間と呼ばれていました。

は、タイプと呼ばれ、呼び出すと思われるメソッドではありません。

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

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

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

+0

お返事ありがとうございます。あなたが同僚と話したことを確認します(私がこのテストを作成していたときにここにいなかった人)。彼はRhinoを使用していて、おそらく私を助けます。面白いのは、 'Expect'(' Stub'の前)の順番を変更すると、うまくいきます。それが意味をなさないかどうかわかりません... –

関連する問題