3

私のアプリケーションはRhino.Commons - NHRepositoryとUnitOfWorkを使用しています。私はトランザクションのためのWith.Transaction()構文が好きであり、しばらく使っています。Rhino.CommonsからUnitOfWorkをどうやってモックするのですか?

しかし、私は問題に遭遇しました。テストのためにUnitOfWorkをどうやって模擬しますか?特に、これは私のためにトラブルを引き起こしている:

With.Transaction(() => Repositories.TwinfieldSpooler.Update(spool)); 

私はRhino.Mocksでリポジトリを模擬することができますが、どのように私は簡単にこの種のコードのためのUnitOfWorkを模擬することができますか?

答えて

0

ありがとうございましたが、実際にはRhinoのインフラストラクチャの模擬を無視することに決めました。 すべてのテストで再構築されたsqliteデータベースの使用については、Ayende http://ayende.com/Blog/archive/2009/04/28/nhibernate-unit-testing.aspxによってこの記事を見つけました。これは素晴らしい解決策でした!

3

With.TransactionはUnitOfWork.Currentプロパティを使用します。 UnitOfWorkは静的クラスです。あなたはRhinoMockでモックできません。

UnitOfWork.Currentはパブリックな静的なプロパティなので、スワップすることができます。残念なことに、セッターは内部です。

私はあなたのための3つのオプションを参照してください。

  • はUnitOfWork.Currentセッター を公開するためにRhino.Commonsソースを変更し、あなたのユニットテストでそれを設定します。

  • UnitOfWork.Currentをあなたの偽装ユニットに設定するためにリフレクションを使用してください。 UnitOfWork.Currentは内部現在 取引を見つけるためにLocal.Dataを使用しているので、あなたが 行くことができるはずです

  • Rhino.Commons.Local.Data [UnitOfWork.CurrentUnitOfWorkKey] = myFakeUnitOfWork。良いニュースの

1ビットはUnitOfWork.CurrentがIUnitOfWorkで、RhinoMocksは簡単に偽造インターフェースことができるということです。

私はRhinoにはあまりよく慣れていないと言って終了する必要があります.Commonsので、AyendeはUnitOfWorkを偽造する正しい方法を構築している可能性があります。これがあなたにとって非常に重要なのであれば、Rhinoのディスカッショングループで尋ねるべきです。

3

私は論理の周りで実際にデータの永続性をテストせずにテストしたいので、同様の必要性がありました。鬼Psalm33は、UnitOfWorkのスタブする方法を述べているが、場合:他人のために情報のジャスト追加ビットを

IUnitOfWork theStubUnitOfWork = MockRepository.GenerateStub<IUnitOfWork>(); 
UnitOfWork.RegisterGlobalUnitOfWork(theStubUnitOfWork); 
0

:私はモックができた/ UnitOfWorkは簡単に私のテストのセットアップ部分でこれらの2行を使用してスタブ私は彼が使用しなかった場合、どこかで彼は、一般的に最後の手段としてのみWith.Transactionを使用したことをAyendeからのノートを見て思い出し

IUnitOfWork stubUnitOfWork = MockRepository.GenerateStub<IUnitOfWork>(); 
RhinoTransaction stubTx = MockRepository.GenerateStub<RhinoTransaction>(); 
stubUnitOfWork.Expect(x => x.BeginTransaction(System.Data.IsolationLevel.Unspecified)).IgnoreArguments().Return(stubTx); 
UnitOfWork.RegisterGlobalUnitOfWork(stubUnitOfWork); 

:あなたはまた、あなたがさらにRhinoTransactionをスタブすることができ、With.Transactionが仕事をしたいです彼の好ましいCastle Automatic Transaction Management

関連する問題