DBトランザクションで単体テストを自動的にラップしますか?

StackOverflow https://stackoverflow.com/questions/407702

  •  03-07-2019
  •  | 
  •  

質問

[編集(ハーレン):複製 ]

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

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

おそらく私のためにこれを行うことができるIL書き換えツール(おそらくAOPフレームワーク)がありますか?誰でも提案がありますか?

役に立ちましたか?

解決

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

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

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

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

他のヒント

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

Spring.net?

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

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top