1

設定方法はこちら:

Hibernate 単体テスト

NHibernate.config を使用します。

[SetUp]
public virtual void SetUp()
{
    var mappingAssemblies = RepositoryTestsHelper.GetMappingAssemblies();
    this.configuration = NHibernateSession.Init(
    new SimpleSessionStorage(),
    mappingAssemblies,
    new AutoPersistenceModelGenerator().Generate(),
    "../../../Northwind.Web/NHibernate.config");
}

外部依存関係を導入するので、これは少し危険ではありませんか? プログラムで NHibernate.config のものを作成し、それを正しい Init メソッドの署名に渡すこともできると思います。私は正しいですか、セットアップ中に誰かがこれを行ったことがありますか? ありがとう。

4

2 に答える 2

3

私は現在のプロジェクトで同様のアプローチを採用することに成功しました。最初はユニットではありませんが、外部リソース、つまりデータベースが関係しているため、統合テストをマッピングし、テストの実行時間と典型的な技術的問題:

  1. 既存のデータベース スキーマを使用しない方がはるかに優れていますが、ランダムなスキーマ名の構成を使用して nHibernate から毎回作成してエクスポートします。これにより、2 人以上の開発者が同じスキーマで同時に統合テストを実行する可能性がなくなります。

    var export = new SchemaExport(構成); export.Execute(script: false, export: true, justDrop: false, connection: databaseConnection, exportOutput: null);

  2. 使用後は、このスキーマをクリーンアップすることを忘れないでください。数日でディスク容量などが不足しやすい

  3. このコードを {[SetUp]} から {[FixtureSetUp]} に移動して、テスト フィクスチャの実行時間を節約することを検討してください。データベースの操作には、通常のメモリ内単体テストの実行時間と比較して多くの時間がかかります

  4. この種のテストは、時間とリソースの消費のために、通常の単体テストと比較して、開発者/CI サーバーによってトリガーされる頻度が低くなる可能性があります。私のプロジェクトでは、夜間ビルドまたは手動でトリガーされたビルド中にのみスケジュールされています。

  5. 実行時に nHibernate 構成を生成できるため、「../../../Northwind.Web/NHibernate.config」は不要です。

  6. 多くの場合、SQL Server を使用する代わりに SQLite を使用できますが、マッピングは通常、各 SQL エンジンに固有です。

于 2012-12-17T13:36:20.750 に答える
1

言及したようにプログラムで実行するか、テストプロジェクトで別の NHibernate.Config を作成するか、プロジェクトで実際の nhibernate.config へのリンクを追加するだけです (プロジェクトを右クリックし、既存の項目を追加し、NHibernate.Config を見つけてから代わりに[追加] をクリックし、[追加] の横にある矢印をクリックして [リンクとして追加] を選択します)。

本当に危険な部分は、本番環境の NHibernate.Config をテスト用に使用していると言えます。

過去にそのようなことを行った場合は、(db 移行ツールを使用して) テスト用に特別にデータベースを作成し、それをテストに使用していました。作成したデータベースの詳細を使用してテスト用の構成ファイルを生成するか、テスト プロジェクトの構成に一致するデータベースを生成します。

于 2012-12-17T13:32:26.123 に答える