8

ほとんどの人は、NHibernate を使用する場合、SQLite のようなインメモリのインプロセス データベースに対してテストを作成しているように思えます。私はこれを実行していますが、最初のテスト (NHibernate を使用する) の実行には常に 3 ~ 4 秒かかります。次のテストははるかに高速に実行されます。

FluentNhibernate を使用してマッピングを行っていますが、XML マッピング ファイルとほぼ同じタイミングになります。私にとって 3 ~ 4 秒の遅延は、私の流れを深刻に混乱させます。

TDD と NHibernate で推奨される作業方法は何ですか?

実際のクエリを単体テストするために ISession をモックすることは可能ですか、それともメモリ内データベースでのみ行うことができますか?

4

4 に答える 4

14

データベース操作を実行するためにリポジトリ パターンを使用しています。テストを実行するときは常に、(RhinoMocks を使用して) リポジトリを単純にモックする高レベルのテストを実行するだけです。

リポジトリ レイヤーと NHibernate マッピングを明示的にテストする別のテスト スイートがあります。そして、それらは通常、その上にあるビジネスおよび GUI ロジックほど変更されません。

そうすれば、DB にヒットすることのない非常に高速な UnitTests と、十分にテストされた DB レイヤーを取得できます。

于 2008-12-02T08:52:35.873 に答える
4

データ アクセスの単体テストはできませんが、統合テストはできます。単体テストとは別のプロジェクトで、データ アクセスの統合テストを作成します。リポジトリ、マッピング、またはデータベース スキーマで何かを変更した場合にのみ、(遅い) 統合テストを実行します。統合テストは単体テストと混在していないため、1 日に約 100 回単体テストを実行しても、イライラすることはありません。

于 2008-12-02T20:07:20.053 に答える
1

http://www.autumnofagile.netおよびhttp://www.summerofnhibernate.comを参照してください。

于 2008-12-01T22:34:50.583 に答える
0

オプションの構成プロパティのデフォルトをいくつか変更してみましたか? スローダウンは、nhibernate がコード生成で行う特定の最適化に関連している可能性が最も高いです。

http://nhibernate.info/doc/nh/en/index.html#configuration-optional

インメモリ データベースは、データ レイヤーをテストする最速の方法になるようです。また、データ層のテストを開始すると、単体テストの領域を少し超えているように見えます。

于 2008-12-01T23:07:20.860 に答える