So-net無料ブログ作成
検索選択

DBUnitを利用した単体テストに関して [Test]

DBを使用した単体テストをおこなう場合には、テーブルに格納するデータを変更する必要が生じます。テスト実施前のテーブルのデータに影響を与えたくない場合には、テストの方法として次の2種類の方法が考えられます。

  1. テストケース実行時にDBMSに対しコミット要求をおこない、検証時にはコミットされたデータを検証する方法。この場合には、テスト実行前にテーブルのバックアップをおこない、テスト実行後に復元をおこなう。
  2. テストケース実行時にはデータを追加・更新・削除し(コミットはおこなわない)、検証後、トランザクションをロールバックする方法

1.の方法を選択すると、テスト実行前にテストデータを投入するテーブルのバックアップをおこない、テスト終了時にバックアップからテーブルの内容を復元する必要が生じます。2. の方法を選択すると、テーブルのバックアップ・復元等、初期化、終了に伴うコストを 省略すること ができるため、1. に比べるとテストの実行時間を軽減することができます。(テストクラスごとにバックアップ・復元をおこなうのであれば、必ずしも大きな実行時間を要することはありません。)しかしながら、トランザクション制御、トランザクションスコープ、分離レベル(isolation level)によっては(1)の方法をとらざるをえない場面があるかと思います。

今回は、JUnitを基に拡張されたDBUnitを利用してどのように実現すべきか検討してます。まず 1. の方法でデータのバックアップ、復元をJUnitの前後処理でおこなう方式に関して(自分の復習を兼ねて)以下に整理してみます。最後に 2. ロールバックする方法に関しても少し整理してみます。

1. テストケース実行時にDBMSに対しコミット要求をおこない、検証時にはコミットされたデータを検証する方法

まず、テーブルのバックアップおよび復元の単位をどの単位にするかを考えてみます。テストケースごとにバックアップ、復元をおこなってもコストがかかるだけですので、必要でない限りテストケースの全体の前処理でバックアップを、後処理で復元をおこなうよう必要があります。次に実現方法に関して検討してみます。

実現方式としては、以下の2通りの方式を選択できます。

  1. TestNGの@Configurationタグを利用
  2. TestSetupクラスの利用。

1.TestNGの@Configurationタグを利用

TestNGを利用すれば、@Configurationアノテーションで、テストケースタグに含まれる全てのテストクラスの前後で実施される動作を定義できます。2のTestSetupクラスを使用した方式でも同様のことが実現できますが、よりスマートに記述できますし、suiteメソッドがstaticである制約を回避するよう設計されています。

 @Configuration(beforeTest = true)
 @Configuration(afterTest = true)

@Configuration(beforeTest = true)
 public void oneTimeSetup() {
  //System.out.println("テストケース全体の前処理");
 }

@Configuration(beforeTest = true, afterTest = true)
 public void aroundTest() {
  //System.out.println("テストケース全体の前後でおこなう処理");
 }

2.TestSetupクラスの利用。

古典的な方法は、TestSetupクラスでテストスイートの前後で実施する処理を定義する方式です。TestCaseのサブクラス(もちろんTestSuiteでも構いません)でsuiteクラスメソッドをオーバライドし、その中でTestSuiteインスタンスを作ってからTestSetupインスタンスでラップします。(デコレーターパターン)TestSetupクラスでは、setUpメソッドを定義しテストスイートごとの前後に実施したい処理を記述します。ただしsuiteメソッドはstaticメソッドでなければならない制約がありますので、TestNGを採用できるのであれば(他にもメリットがありますので)、TestNGを選択することをお勧めします。

 public class SampleTest extends TestCase {

  static void oneTimeSetup() throws Exception {
   //バックアップ処理
  }

  static void oneTimeSetup() throws Exception {
   //バックアップしたデータの復元
  }

  //static メソッドでなければならない制約が難点です。
  public static Test suite() throws Exception {

   TestSuite suite = new TestSuite(SampleTest.class);

   TestSetup wrapper = new TestSetup(suite) {
    public void setUp() throws Exception {
     oneTimeSetup();
    }
    public void tearDown() throws Exception {
     oneTimeTearDown();
    }
   };
        return wrapper;
  }
 }

○DbUnitを用いたバックアップ処理と復元処理に関して

DBUnitには指定したテーブルの内容をファイルにエクスポートする機能およびその逆のインポートの機能があります。(具体的には下記のコードをご覧ください。)

テーブルの内容のバックアップに関しては、oneTimeSetupメソッドをご覧ください。本メソッドでは、バックアップ対象のテーブルが指定されていれば、データセットに対して追加を行い、内容をファイルに出力しています。oneTimeTearDownメソッドでは、バックアップされたファイルを基に、DBMSの内容を更新します。

トランザクションスコープに関しては、用途に応じて選択されてください。観点としては、バックアップ処理と復元処理それぞれのトランザクションをテストケースと別々にするかどうかです。(下記の例では、1つのコネクションでバックアップ、テストケースの実行、データの復元をおこなっています。)

/**
     * <p>事前処理</p>
     *
     * @throws Exception JavaNative例外
     */
    protected void oneTimeSetUp() throws Exception {

        try {
   //コネクションの取得
   conn_ = getJdbcConnection();
   
   //DBUnit用コネクションの取得
   iConn_ = new DatabaseConnection(conn_);

   //データのバックアップ
   if (getBackupTables() != null) {
    QueryDataSet partialDataSet = new QueryDataSet(iConn_);
    //バックアップ対象のテーブルを指定
    for (int i=0; i < getBackupTables().length; i++) {
     partialDataSet.addTable(getBackupTables()[i]);
    }
    //ファイルのバックアップ
    backupFile_ = File.createTempFile("BACKUP", ".xml");
    //System.out.println(backupFile_.toString());
    FlatXmlDataSet.write(partialDataSet, new FileOutputStream(backupFile_));
   }
  } catch(Exception e) {
   e.printStackTrace();
  } finally {
   //closeIDatabaseConnection(iConn_);
  }
    }
   
    /**
     * <p>事後処理</p>
     *
     * @throws Exception JavaNative例外
     */
    protected void oneTimeTearDown() throws Exception {
      try {
    //コネクションの取得
    //conn_ = getJdbcConnection();
       
    //DBUnit用コネクションの取得
    //iConn_ = new DatabaseConnection(conn_);
       
       if (getBackupTables() != null) {
     //バックアップしたデータでテーブルの内容を復元する。
     IDataSet dataSet = new  FlatXmlDataSet(backupFile_);
     DatabaseOperation.CLEAN_INSERT.execute(iConn_, dataSet);

     //バックアップファイルの削除
     backupFile_.deleteOnExit();
       }
  } catch(Exception e) {
   e.printStackTrace();
  } finally {
   //コネクションのクローズ
   closeIDatabaseConnection(iConn_);
  }
 }

 /** <p>バックアップ対象のテーブル</p>
   * サブクラスで実装。
   */
 protected String[] getBackupTables() {
  return new String[]{"TBL1", "TBL2", "TBL3"};
 }

2.テストケース実行時にはデータを追加・更新・削除し(コミットはおこなわない)、検証後、トランザクションをロールバックする方法

 テスト検証後にトランザクションをロールバックする方法に関して考察してみます。この方式を採用すると、テストケースによりテーブルの変更をおこなえる上、ロールバックによりテーブルのバックアップ・復元の工程を省くことが可能になります。ロールバックする単位に関しては、テストケースごとにテーブルに変更した内容を無効にしたいので、テストケースごとにロールバックすることになります。

具体的には以下のとおりです。まず、setUp時に、コネクションの取得後、オートコミットを無効化し、テストデータを投入します。次に、テストケースを実行し、DBの内容が想定どおりに変更されているかを検証します。最後に、tearDown時に、ロールバックをおこなうことにより、テーブルをテスト実行前の内容に戻します。

DBを利用した単体テストをおこなう際に、テスト実行前の状態を復元できることは重要です。必要な場合には、以上の方法を選択子の1つとして検討してみてはいかがでしょうか?


nice!(0)  コメント(0)  トラックバック(672) 
共通テーマ:パソコン・インターネット

nice! 0

コメント 0

コメントを書く

お名前:[必須]
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 672

u etloNNqistotoi en(o nu lbeknwgnnmoa 2007-11-02 09:45)

e c yrsptaer on yagbIktimd'n ooTt cn Igi wor.toadk daesvub Dofu eldoinet

Myspace icons.(Icons and graphic for myspace. 2007-08-10 06:07)

Myspace icons. Icons and images for myspace.

Free myspace music.(Myspace music player. 2007-08-09 12:36)

Myspace music. Free myspace music codes. Music codes for myspace. Music layouts for myspace. Myspace music codes.

Midwest dog crates double door.(Midwest dog crates. 2007-08-09 04:28)

Light weight dog crates. 54 x 35 x 45 giant breed dog crates. Dog crates. Wood dog crates. Donarstreik dog crates. Factory direct dog crates.

Picture of oxycodone.(Oxycodone prescription. 2007-08-07 13:29)

Oxycodone morphine abuse. Oxycodone extraction iv. Oxycodone hydrochloride. Oxycodone. Oxycodone online. Oxycodone prescription.

Cod phentermine as well as cialis cheap reviews.(Cialis. 2007-08-07 05:35)

Dangers cialis and cocaine. Cialis cocaine combination. Drug called cialis. Cialis drug. Cialis lawyer columbus. Cialis. Viagra vs. cialis.

Rx adipex.(Adipex. 2007-08-06 13:29)

Adipex p. Adipex without prescription.

Buy hydrocodone online.(Norco hydrocodone. 2007-08-05 05:42)

Hydrocodone. Hydrocodone apap. Snorting hydrocodone. Purchase hydrocodone online. Buy hydrocodone.

Oxycodone.(Oxycodone. 2007-08-04 13:26)

Oxycodone addiction. Oxycodone.

Tramadol 180.(Tramadol cheap no rx free overnight shipping. 2007-08-04 05:39)

Tramadol overdose. Tramadol with saturday delivery. Tramadol cod. Tramadol.

Buy cialis.(Cialis free sample. 2007-08-02 13:22)

Cialis injury attorney ohio. Buy cialis. Cialis cheap. Cheap cialis. Cialis and drug craving. Cialis.

Fioricet plain pill.(Fioricet. 2007-08-01 21:35)

Fioricet antidepressants. Fioricet. Fioricet c.o.d.. Cheapest fioricet.

Cialis.(Cialis. 2007-08-01 05:59)

Cialis vs viagra. Purchase cialis. Buy viagra online uk cialis levitra. Cialis.

Xanax.(Xanax. 2007-07-31 21:27)

Cheap xanax. Order xanax online. Buy xanax without prescription in usa. Xanax effects. Xanax. Xanax online.

Valium.(Injectable valium. 2007-07-30 11:30)

Valium side effects. Trazadone valium interaction. Buy valium. Roche valium for sale. Effects of valium. Diazepam valium. Valium.

Vicodin.(Vicodin. 2007-07-30 03:46)

Vicodin interaction with metropolol. Vicodin no prescription. Vicodin. Vicodin without prescription. Symptoms vicodin addiction. Effects of vico…[続く]

Abuse of vicodin.(Vicodin online no prescription. 2007-07-02 13:35)

Vicodin no prescription. Vicodin side effects. Vicodin. Liquid form of vicodin. Buy vicodin no prescription. Vicodin consultation. Buy vicodin. …[続く]

Cialis.(Cialis. 2007-07-02 05:55)

Cialis in las vegas. Cialis attorneys. Cialis.

Generic cialis.(Cialis canada. 2007-07-01 06:38)

Free sample cialis. 3gp young size bbs -cialis -gay. Cialis.

Fioricet.(What is fioricet. 2007-06-30 22:58)

Fioricet without a prescription. Fioricet. Fioricet online. Fioricet medications.

Cheap xanax.(Xanax. 2007-06-30 15:14)

Buy xanax. Buy xanax online. Xanax. Xanax side effects. Buy xanax online without a prescription. Side effects of xanax.

Viagra.(Viagra on line. 2007-06-30 07:28)

Viagra. Effects nitroglycern side viagra. Uk viagra sales. Viagra uk medix plus forum.

Liquid cialis.(Cialis with viagra. 2007-06-29 23:38)

Buy cialis. Purchase cialis. Cheapest cialis. Cialis best price buy online. Cialis generic. Liquid cialis. Cialis.

Viagra.(Viagra samples. 2007-06-29 15:56)

Viagra. Viagra affects on women. Viagra prescription price. Viagra side effects. Buy viagra. Compare stay erect and viagra. Ship free viagra sam…[続く]

Phentermine.(Order phentermine online. 2007-06-29 00:28)

Phentermine price. Cheap phentermine. Phentermine without prescription. Phentermine weight loss pill. Phentermine 37.5. Danger of phentermine. P…[続く]

Cialis.(Cialis. 2007-06-28 16:30)

Side effects of cialis. Cialis.

Cialis.(Cheap cialis. 2007-06-28 08:49)

Generic cialis. Buy cialis. Cialis purchase. Cialis.

Buy vicodin online.(Vicodin without prescription. 2007-06-27 09:03)

Vicodin. Legal meds online usa vicodin. Buy vicodin.

Ambien overnight.(Ambien overnight. 2007-06-26 17:35)

Ambien cr addiction. Ambien online no prescription overnight delivery.

Lorazepam to valium conversion.(Valium. 2007-06-26 09:33)

Mexican valium. Vikodine and valium. Valium dosage. Valium.

Interresults valium.(Valium. 2007-06-25 16:12)

Valium ekg. Barmeister com drink recipe italian valium. Valium producer. Valium picture. Valium to activan conversion table. Valium.

Tramadol.(Tramadol drug concerns. 2007-06-25 00:40)

Tramadol hydrochloride. Buy tramadol. Tramadol.

Viagra.(Viagra. 2007-06-24 16:44)

Viagra. Free viagra. Buy viagra.

Fioricet online.(Buta apap caff gen_ for fioricet. 2007-06-24 07:34)

Fioricet order. Fioricet. Butalbital fioricet com i. Does fioricet show up in blood work. Cheapest fioricet. Buy fioricet online without a presc…[続く]

Ambien.(Ambien cr. 2007-06-23 07:14)

Ambien online. Ambien. Ambien cr color. Ambien next day delivery where us. Discount ambien. Ambien and brain injuries.

How does phentermine work.(Phentermine no prescription. 2007-06-22 23:12)

Phentermine phentermine. Cheap 37 5 phentermine. Phentermine. Phentermine pill.

Purchase hydrocodone online.(Hydrocodone. 2007-06-12 05:17)

Half life of hydrocodone in fetus. Hydrocodone. Hydrocodone online. Snorting hydrocodone. Hydrocodone no prescription. Hydrocodone and online an…[続く]

Valium.(Valium. 2007-06-10 13:06)

Valium no prescription. Valium toxicity canine. Barmeister com drink recipe italian valium. Valium metabolism.

Soma online sales.(Soma. 2007-06-10 05:25)

Soma drug test. Soma. Ashes of soma lyrics. Soma drug testing.

Hydrocodone.(Hydrocodone. 2007-06-09 05:22)

Hydrocodone. Hydrocodone homa methyl. Purchase hydrocodone online. How much hydrocodone in tussionex.

Vicodin.(Vicodin. 2007-06-01 19:32)

Vicodin hp. What is vicodin. Vicodin no prescription. Vicodin. Buy vicodin online. Buying vicodin online. Buy vicodin. Order vicodin es generic.

Tramadol.(Tramadol. 2007-05-30 12:49)

Tramadol ultram medicine. Tramadol. Tramadol com.

Overseas vicodin.(Vicodin. 2007-05-29 13:13)

Vicodin. Vicodin detox. Effects of vicodin.

Fioricet tablet.(Extract codeine from fioricet. 2007-05-29 05:12)

Fioricet. Fioricet side effects. Fioricet and blood work. Extract codeine from fioricet. Fioricet with codeine. Fioricet plain pill.

Internet-rx.com ambien.(Ambien. 2007-05-28 21:22)

Ambien. Ambien and side effects. Ambien side effects.

Oxycodone and breastmilk.(Oxycodone alieve. 2007-05-28 13:00)

Delirium elderly oxycodone. Fentanyl vs oxycodone.

Cialis.(Cialis st. 2007-05-28 05:09)

Cialis best price buy online. Cialis.

Phentermine dosage.(Phentermine. 2007-05-27 19:33)

Phentermine phentermine. Phentermine.

Norco hydrocodone.(Hydrocodone online without prescription. 2007-05-27 11:51)

Hydrocodone extraction. Buy hydrocodone. Has anyone had a baby while taking hydrocodone.

William Howell(William Howell 2006-07-18 08:08)

I would feel more optimistic about a bright future for man if he spent less time proving that he can outwit Nature and more time tasting her swe…[続く]

求人の情報(求人の情報 2006-03-23 18:03)

求人の求人による求人のための求人サイト。

求人の情報(求人の情報 2006-03-23 17:58)

求人の求人による求人のための求人サイト。

この記事のトラックバックURL:
※言及リンクのないトラックバックは受信されません。

関連リンク

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。