2

[編集 (Haren):複製]

NUnit 統合テストを DB トランザクションで自動的にラップして、テストによって行われた変更がテストの終了時に自動的にロールバックされるようにする方法を探しています。理想的には、特定のテスト メソッドを、テストの開始時に NUnit にトランザクションを作成させ、テストの終了時にロールバックさせるカスタム属性で装飾します... 属性を記述できますが、どこに追加すればよいかわかりませんそれのチェック。

テスト DB のサイズは 3 GB であるため、各テストの開始時に復元することはできません。各テストの本文で手動でトランザクションを作成できることはわかっていますが、もっとエレガントなものを探しています。

おそらく、これを実行できる IL 書き換えツール (おそらく AOP フレームワーク) があるでしょうか? 誰にも提案はありますか?

4

3 に答える 3

4

ここで、ネストされたトランザクションで問題が発生しませんか? 私が理解しているように、ほとんどのDBはトランザクション内のトランザクションをサポートしていません。したがって、テスト対象のコードがトランザクションをまったく使用している場合 (トランザクションをサポートする DB を使用している場合は、それらを使用していると思います)、実際に必要なのはネストされたトランザクションです。 DB は直接サポートしていません。

于 2009-01-02T19:01:55.020 に答える
3

推奨事項は 2 つあります。1 つ目は、SetUp 属性と TearDown 属性を使用してトランザクションを開始し、完了したらロールバックする方法です。NUnit でこれを行うためのドキュメントは次のとおりです。

http://www.nunit.org/index.php?p=setup&r=2.4.8

それを使用したくない場合は、すべてのメソッドでそれをコーディングするという別のオプションがありますが、using ステートメントで TransactionScope インスタンスを使用してトランザクションを作成します (プロバイダーは自動登録する必要があります)。

もちろん、SetUp メソッドと TearDown メソッドでも TransactionScope インスタンスを作成できます。

于 2009-01-02T18:59:31.093 に答える
0

スプリングネット?

私は Java/JUnit のバックグラウンドを持っていますが、Java では Springframework を使用してこれを実行できることを知っています。

(AOP を適用するには、ApplicationContext/BeanFactory からテストを取得する必要もあります)。

于 2009-01-02T18:58:29.177 に答える