データベースへの接続情報をアノテーションで設定する

データベースへの接続情報をアノテーションでも設定できるようにしました。

と同時に、スキーマも記述できるようにしました。

さらに、JDBCのURLから判断して、DbUnitの!IDataTypeFactoryを自動的に設定するようにしました(後述)。

ライブラリDbUnitNGでは接続情報を設定する方法が2つあります。

  • testng.xml
  • アノテーション

XMLだとこんな感じです。

  1. <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
  2. <suite name="!DbUnitNG">
  3. <parameter name="driver" value="com.mysql.jdbc.Driver"></parameter>
  4. <parameter name="url" value="jdbc:mysql://127.0.0.1/testframework"></parameter>
  5. <parameter name="username" value="root"></parameter>
  6. <parameter name="password" value="root"></parameter>
  7. <parameter name="schema" value="testframework"></parameter>
  8. <listeners>
  9. <listener class-name="org.dbunitng.listeners.!DbUnitNGTestListener"></listener>
  10. </listeners>
  11. <test verbose="2" name="sample" annotations="JDK">
  12. <classes>
  13. <class name="org.dbunitng.sample.PerformanceTest">
  14. </class>
  15. </classes>
  16. </test>
  17. </suite>

同じ設定をアノテーションでするとこうなります。

  1. @BeforeSuite
  2. @DbUnitNG(driver = "com.mysql.jdbc.Driver", password = "root", url = "jdbc:mysql://127.0.0.1/testframework", username = "root", schema = "testframework")
  3. public void beforeSuite() {}
接続情報を記述するアノテーションは@DbUnitNGです。

XMLの記述内容と同じですが、必ず@BeforeSuiteと併用しないといけません。

@BeforeSuite + @DbUnitNGで読み取れます。

もし、XMLとアノテーション両方とも使った場合、アノテーションを優先します。

IDataTypeFactory

DbUnitの!IDataTypeFactoryは各データベース独自のデータ型をサポートするためのものです。

たとえば、Oracleを使っている場合、OracleDataTypeFactoryオブジェクトをDbUnitのDatabaseConfigオブジェクトにセットします。

  1. config.setProperty(DatabaseConfig.PROPERTY_DATATYPE_FACTORY,factory);

ライブラリDbUnitNGではこの設定を自動的にやります。

JDBCのURLに含まれるデータベース名から判断してます。

jdbc:sqlserver://hostname:9999MsSqlDataTypeFactory
jdbc:oracle:thin:@hostname:1521:orclOracleDataTypeFactory
jdbc:db2://host:9999/databaseDb2DataTypeFactory
jdbc:mysql://127.0.0.1/testframeworkMySqlDataTypeFactory
jdbc:hsqldb:hsql://127.0.0.1:9001HsqldbDataTypeFactory
jdbc:h2:tcp://localhost:9092/MyDBH2DataTypeFactory

これら以外のデータベースならデフォルトのファクトリを使います。