1

SQL Server でビューを操作するときにストアド プロシージャのサポートを挿入する方法について質問しました。

データベース ビューで作業するときに作成/更新のために NHibernate でストアド プロシージャを使用する方法

マッピング ファイルの一部を次に示します。

    <sql-insert>
        exec sp_cycle_insert ?,?,?
    </sql-insert>
    <sql-update>
        exec sp_cycle_update ?,?,?,?,?,?
    </sql-update>
    <sql-delete>
        raiserror ('Cycle can not be deleted', 10, 1)
    </sql-delete>

それで、リファクタリングなどを行い、テストを実行しました....すべて失敗しました。

理由は、SQL Server にはビューとストアド プロシージャがあるためですが、テストを実行するたびに、データベースを最初からセットアップします。

        new SchemaExport(configuration).Execute(false, true, false);

私は可能な解決策について考えましたが、ここにあります:方法はありますか:

  • データベースに必要なもの(ストアドプロシージャ、ビューなど)を使用して追加のスクリプトを実行します(それが解決策だと思います)

一方、実行中のスクリプトは失敗する可能性があります (現在は sdf ファイルを使用していますが、将来別のプロバイダーに変更した場合はどうなりますか?)。また、プロシージャ/ビューは、WITH構造と、テスト中に使用されるデータベースでサポートされていないSQL Server 2005 関数を使用します。

  • . だから、リポジトリをモックする時が来たと思いました。しかし、ここにも障害があります。ビューはいくつかの読み取り専用プロパティを計算し、NHibernate は以下を使用してバッキング フィールドにアクセスします。

access="nosetter.camelcase"

リポジトリのモックに切り替えると、コードでビューのロジックを実装する責任があります。他の解決策はありますか?それとも私が大変なことになっている!?

4

1 に答える 1

1

データベースに必要なもの(ストアドプロシージャ、ビューなど)を使用して追加のスクリプトを実行します(それが解決策だと思います)

これには IAuxiliaryDatabaseObject オブジェクトを使用します。SchemaExport を使用してスキーマを作成/削除するときに実行する追加のスクリプトが含まれます。これ/これらのオブジェクトを NH 構成オブジェクト (AddAuxiliaryDatabaseObject) に渡します。

だから、リポジトリをモックする時が来たと思いました。しかし、ここにも障害があります。ビューはいくつかの読み取り専用プロパティを計算し、NHibernate は以下を使用してバッキング フィールドにアクセスします。

おそらく両方を行う必要があります。実際のデータベースに対して統合テストを実行して、インフラストラクチャ/DAL/任意のレイヤーが機能することを確認します。より高いレイヤーでは、おそらく、リポジトリなどをモックする代わりに単体テストを作成する必要があります。あなたの質問を正しく理解できた場合、一部のデータはエンティティで非公開であるため、テスト状態の設定に問題がありますか? これは実際には NH/repos/data アクセスによって引き起こされる「問題」ではなく、一般的な問題です。それを解決するにはさまざまな方法があります。APIを緩和してテストしやすくし、すべてのデータを受け入れるctorを持ち、リフレクションを何らかの方法で使用し、エンティティのインターフェースを読み取り専用にしますが、その実装にはセッターなどがあります。一般的な推奨事項を与えるのは難しいですが、あなたのケースに合った方法。

于 2012-08-28T17:55:39.547 に答える