Fight the Future

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

DbUnit の検索結果:

DbUnitライブラリでデフォルトのDatabaseOperationを指定できます

…OperationでDbUnitのDatabaseOperationを指定できるわけですが、 テストメソッドごとに毎回指定するのは手間なので、 テストスイート全体でデフォルトを設定できるようにしました。 接続情報と同様に、 testng.xmlか@DbUnitNGアノテーションで指定することができます。 もちろんデフォルトを指定しないこともできます。こんな感じです。 @BeforeSuite @DbUnitNG(driver = "com.mysql.jdbc.Driver"…

DbUnit + TestNGライブラリDbUnitNGプロジェクトWiki更新しました

DbUnitNG Wiki - SourceForge.JP ブログに書いていたことはすべてWikiに転載してます!

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

DbUnitNG プロジェクト日本語トップページ - SourceForge.JPで、データベースへの接続情報をアノテーションでも設定できるようにしました。 と同時に、スキーマも記述できるようにしました。 さらに、JDBCのURLから判断して、DbUnitのIDataTypeFactoryを自動的に設定するようにしました(後述)。ライブラリDbUnitNGでは接続情報を設定する方法が2つあります。 testng.xml アノテーション XMLだとこんな感じです。 <!DOCT…

DbUnitNG0.2リリース!

…グを修正しました! DbUnitNG プロジェクト日本語トップページ - SourceForge.JP AssertionHelperクラスを使えばラクにアサートすることができます。 List<Dept> deptList = deptDao.listAllDept(); AssertionHelper.assertEqualsOnlyColumnsInFile( deptList, getClass(), "dept.xml"); 単に内部ではリストをデータセットに変換して…

DbUnitライブラリ用のサンプルを作成しました

trunk/DbUnitNG/sampleとsampletestディレクトリ以下にあります。 sampleはiBatisを使ったデータベースアクセスアプリです。 なので、DbUnitNGの依存ライブラリに加えてiBatisのライブラリが必要です。 DBはMySQLを使っていますが、他のDBでも動くはずです。 必要なテーブルのcreate文や初期データはsampleのorg.dbunitng.sample.sqlパッケージに入っています。

ライブラリをソーシャルブックマークしてくれてる人が!

Livedoorクリップでライブラリをブクマしてくれてる人が! 1人だけど、超感激。

TestNG+DbUnitライブラリのパフォーマンス

…ckage org.dbunitng.sample.test; import java.util.List; import org.dbunit.DatabaseUnitException; import org.dbunitng.annotations.DatabaseOperationType; import org.dbunitng.annotations.SetUpOperation; import org.dbunitng.assertion.AssertionHe…

DbUnitNG 0.1 リリース!

DbUnitNGのバージョン0.1をリリースしました。 DbUnitのSetUpOperationとTearDownOperatonをアノテーション対応しました。 BeanのListをDbUnitのIDataSetに変換するBeanListConverterを実装しました。 DbUnitのAssertionに対するヘルパークラスAssertionHelperクラスを実装しました。 以上すべてテストコードを記述済です。 基本的な使い方はSourceForgeのWikiに記述して…

TestNGで使えるアノテーションの作り方

DbUnit + TestNGのライブラリでは、@SetUpOperationなどのアノテーションを使えるわけですが、これはTestNGでリスナーインタフェースが用意されているおかげです。 TestNGでは、リスナーインタフェースが4つ用意されています。 リスナー 説明 IMethodInterceptor テストメソッド実行前に呼び出されるリスナー。実行するテストメソッドを選択することができる。 IReporter テスト結果のレポート処理に関するリスナー。 ISuiteL…

DbUnitライブラリでネストしたBeanをDateSetに変換できます

ライブラリDbUnitNGで、 ネストしたBeanをDbUnitのデータセットに変換できるように対応しました。 ネストしたBeanとは次のようなことを意味してます。 あるBeanのプロパティとして、 別のBeanを持つ 別のBeanをListで持つ 別のBeanを配列で持つ テストコードも記述して、コミットしています。 ネストしたBeanをどんなDataSetにしているかというと、Beanの型ごとにDbUnitのテーブルとしています。 つまりこういうクラス public cl…

TestNG+DbUnitNGライブラリのテストコードを記述しました

…eanがネストしない(Beanが他のBeanをプロパティとして持たない)限り、 リストをデータセットに変換できるようになってます。 # いくつかバグを修正しました。 BeanがDateやBigDecimalをプロパティに持っても、変換してDataSetの形でアサーションできるので、けっこう実用的だと思います。 ライブラリはここにあります。DbUnitNG プロジェクト日本語トップページ - SourceForge.JP trunkをダウンロードすればJavadocも見れます。

DbUnitでファイル(XML,Xls)に日付を書くときの書式

DbUnitで期待値をXMLやExcelに記述すると思うけど、 日付の書式は基本的にDate.valueOf()やTimestamp.valueOf()で有効な書式を記述する。 こんな感じ。 <?xml version='1.0' encoding='UTF-8'?> <dataset> <datebean javaUtilDate="2008-08-08" javaSqlDate="2008-08-08 15:20:11" timestamp="2008-08-08 15:…

DbUnitのFlatXmlDataSetの注意点

DbUnitのFlatXmlDataSetはXMLからDataSetを生成するときに利用する。 だけど1点注意。 FlatXmlDataSetは1つ目の要素の属性をテーブルのカラムとする。 だから、こういうのはダメだ。 <?xml version='1.0' encoding='UTF-8'?> <dataset> <simplebean i="0" /> <simplebean string="" i="1" /> <simplebean string="a" i="-1"…

DbUnitライブラリのWiki更新しました

DbUnitNG Wiki - SourceForge.JP 今までBlogに書いていた、ライブラリの使い方をSourceForgeのWikiにまとめました。 よかったら見てみてください!

BeanのリストをDbUnitのDataSetに変換する

…BeanのListとDbUnitのDataSetの比較をなんとかしたいと思ったわけだけど。 DbUnitの弱点はBeanのListとDataSetを比較できないこと - Fight the Future じゅくのblog BeanのListとDbUnitのDataSetを比較する方法を考える - Fight the Future じゅくのblog 実装してみた。 まだネストしたBeanには対応してないけど、よくあるDTOみたいなフラットなBeanのListならDataSetに…

BeanのListとDbUnitのDataSetを比較する方法を考える

DbUnitの弱点はBeanのListとDataSetを比較できないことから考えて、実際に比較する方法を考えようと思う。 方法は2つある。 BeanのListをIDataSet実装オブジェクトに変換する DataSetから比較するBeanのListに変換する 2の方法だと、プリミティブなプロパティだけならいいけど、集約してるときとか変換するのが大変そう(あるBeanが違うBeanのListをプロパティとして持つなど)。 なので1の方法で考える。基本的にクラスのメタ情報を使えば…

DbUnitの弱点はBeanのListとDataSetを比較できないこと

DbUnitを使うにあたって一番問題になることは、Daoから取得したJava BeansのListとExcelの期待値を比較できないことだ。 Excel(XML)の期待値はDbUnitではDataSetとして表す。 だけど、DbUnitのAssertクラスであるorg.dbunit.AssertionクラスではDataSet同士しか比較できない。 assertEquals(IDataSet expectedDataSet, IDataSet actualDataSet) as…

DbUnitでDatabaseOperation.DELETEするときのXML

<?xml version='1.0' encoding='UTF-8'?> <dataset> <DEPT /> <EMP /> </dataset> のようにテーブルを要素名にしてを列挙するだけでよい。 逆にデータを登録するときにはカラムの値を属性にする必要がある。 <?xml version='1.0' encoding='UTF-8'?> <dataset> <DEPT DEPTNO="10" DNAME="ACCOUNTING" LOC="NEW YORK"/> <…

DbUnitアノテーション対応の使い方

…/projects/dbunitng/からダウンロードしてもらうとして。 TestNGのテストスイートファイルであるtestng.xmlにデータベース接続情報を記述します。 <parameter name="driver" value="com.mysql.jdbc.Driver"></parameter> <parameter name="url" value="jdbc:mysql://127.0.0.1/データベース名"></parameter> <parameter …

TestNGでDbUnitをアノテーション対応するコードをSourceForgeにコミットした

TestNGとDbUnitを連携させ、より簡単にデータベース接続テストを作成できるようにします。たとえば、アノテーションを用いて初期データを投入できます。 SourceForge.JP: Project Info - DbUnitNG

DbUnitのアノテーション対応 ( with TestNG )

…me = "org/dbunitng/dept-emp.xml") @Test public void verifySelectAllFromDept() { // call target method and assert... } 要はDbUnitのアノテーション対応。 @SetUpOperationでテスト実行前にテストデータを投入する。 アノテーションの属性でDbUnitのDatabaseOperationを指定したり、テストデータのファイルを指定したりできる。 Ja…

TestNGとDbUnitを連携したサンプル

TestNGとDbUnitを連携させることで、テストクラスはTestCaseを継承する必要がなくなる。 TestCaseを継承する代わりに、XXDatabaseTesterというDbUnitにあるクラスを使う。 JdbcDatabaseTester DataSourceDatabaseTester DriverManagerからConnectionを作るか、DataSourceからConnectionを作るかで使い分ける。 たとえばテスト実行前のsetup処理はこんな感じ。 …

DbUnit形式でExcelまたはXMLファイルにテーブルのダンプを取る

…mport org.dbunit.JdbcDatabaseTester; import org.dbunit.database.IDatabaseConnection; import org.dbunit.dataset.IDataSet; import org.dbunit.dataset.excel.XlsDataSet; //import org.dbunit.dataset.xml.FlatXmlDataSet; public class TablesDumper {…

DbUnitのDatabaseTestCaseを継承して独自のテストフレームワークを作る4

DbUnitのIDataSetはこれで比較できました。 ExtendedAssertion.assertEquals(expected, actual);でも、たとえばタイムスタンプの列とかは比較できない、という場合もあると思います。そのときは、 IDataSet dataSet; for (ITableIterator i = dataSet.iterator(); i.next();) { ITable table = i.getTable(); table = Defa…

DbUnitのDatabaseTestCaseを継承して独自のテストフレームワークを作る3

…ブルのデータですが、DbUnitのIDatabaseConnectionにはcreateDataSet()というメソッドがあります。この戻り値がIDataSet型なので、先ほどのexcelから作ったXlsDataSetと比較すればテーブルと期待値の比較ができる、というわけです。createDataSet()は引数なしで呼び出すとそのスキーマの全テーブルを取ってきますが、String配列でテーブルを指定することができます。 IDataSet actual = getConnec…

DbUnitのDatabaseTestCaseを継承して独自のテストフレームワークを作る2

…2つのメソッドです。DbUnitのデフォルトが上のソース。getSetUpOperation()で初期化の際のDBの状態を、getTearDownOperation()でテストメソッド実行後のDBの状態を設定できます。どちらもDatabaseOperationオブジェクトを返しますが、このクラスにはいろいろな定数があるので、それを使うだけでいいです。DatabaseOperation.CLEAN_INSERTは初期化対象のテーブルのデータをすべて削除してから初期化データを登録…

DbUnitのDatabaseTestCaseを継承して独自のテストフレームワークを作る

…しかも「大文字」で。DbUnitの内部でスキーマは大文字で保持しているので、小文字で渡すとダメでした。ケースは無視してほしいなあ。さらにDBごとの設定もできます。 DatabaseConfig config = databaseConnection.getConfig(); config.setProperty(DatabaseConfig.PROPERTY_DATATYPE_FACTORY, new Db2DataTypeFactory());DBの文字列とか数値とか日付っ…

DbUnitのXlsTable

…対応するわけですけど、各セルの値の取得はXlsTable#getValue()で実装されてます。話変わって、DbUnitでのexcelへのアクセスはJakarta POIを利用してます。バグではない有名な話があって、セルの値を文字列として取得すると末尾にスペースが付く場合があるんです。excelのリッチテキスト形式がなんとか。。。って感じで詳しくはわかってないんですが。なので文字列はトリムして返したいなあと思ったら、XlsTableはpublicじゃなかった!って感じでした。

DbUnitでのexcelファイル読み込み

DbUnitでexcelファイルを読み込み、DBへ登録する初期値やテスト結果の期待値を取得します。それにはorg.dbunit.dataset.excel.XlsDataSetを使います。このXlsDataSetはコンストラクタでjava.io.Fileかjava.io,InputStreamを渡します。では、DbUnitを拡張して独自にテストフレームワークを作成するとして、excelファイルはどう読み込みます??僕はクラスローダを取ってきてClassLoader#getRe…

DbUnitでのスキーマ指定

DbUnitの方ではスキーマを大文字で保持しているので、IDatabaseConnectionを生成するときにはスキーマは大文字にして渡しておこう。