Fight the Future

Java言語とJVM、そしてJavaエコシステム全般にまつわること

DbUnitライブラリで接続情報をアノテーションにしました

DbUnitNG プロジェクト日本語トップページ - SourceForge.JPで、データベースへの接続情報をアノテーションでも設定できるようにしました。
と同時に、スキーマも記述できるようにしました。
さらに、JDBCのURLから判断して、DbUnitのIDataTypeFactoryを自動的に設定するようにしました(後述)。

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

  1. testng.xml
  2. アノテーション

XMLだとこんな感じです。

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="DbUnitNG">
	<parameter name="driver" value="com.mysql.jdbc.Driver"></parameter>
	<parameter name="url" value="jdbc:mysql://127.0.0.1/testframework"></parameter>
	<parameter name="username" value="root"></parameter>
	<parameter name="password" value="root"></parameter>
	<parameter name="schema" value="testframework"></parameter>
	<listeners>
		<listener class-name="org.dbunitng.listeners.DbUnitNGTestListener"></listener>
	</listeners>
	<test verbose="2" name="sample" annotations="JDK">
		<classes>
			<class name="org.dbunitng.sample.PerformanceTest">
			</class>
		</classes>
	</test>
</suite>

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

@BeforeSuite
@DbUnitNG(driver = "com.mysql.jdbc.Driver", password = "root", url = "jdbc:mysql://127.0.0.1/testframework", username = "root", schema = "testframework")
public void beforeSuite() {}

接続情報を記述するアノテーションは@DbUnitNGです。
XMLの記述内容と同じですが、必ず@BeforeSuiteと併用しないといけません。
@BeforeSuite + @DbUnitNGで読み取れます。


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

IDataTypeFactory

DbUnitのIDataTypeFactoryは各データベース独自のデータ型をサポートするためのものです。
たとえば、Oracleを使っている場合、OracleDataTypeFactoryオブジェクトをDbUnitのDatabaseConfigオブジェクトにセットします。

config.setProperty(DatabaseConfig.PROPERTY_DATATYPE_FACTORY,factory);

ライブラリDbUnitNGではこの設定を自動的にやります。
JDBCのURLに含まれるデータベース名から判断してます。

jdbc:sqlserver://hostname:9999 MsSqlDataTypeFactory
jdbc:oracle:thin:@hostname:1521:orcl OracleDataTypeFactory
jdbc:db2://host:9999/database Db2DataTypeFactory
jdbc:mysql://127.0.0.1/testframework MySqlDataTypeFactory
jdbc:hsqldb:hsql://127.0.0.1:9001 HsqldbDataTypeFactory
jdbc:h2:tcp://localhost:9092/MyDB H2DataTypeFactory

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