Fight the Future

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

DbUnit の検索結果:

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を生成するときにはスキーマは大文字にして渡しておこう。

【ONJava.com翻訳】DbUnitを使った効果的なユニットテスト

…公開しています! 記事自体は2年前くらいに翻訳したもので古いんですけど、DbUnitの基本的な使い方が解説されています。 DbUnitというのはJUnitを拡張したもので、データベースアクセスの単体テストを行うためのツールです。 テストの実行前とxmlやExcelを用いてデータベースのテーブルに必要なデータをセットしたり、実行後にデータを消すといったことができるため、データベースにアクセスするクラスでも単体テストを自動化、反復化することができます。 よかったら読んでください!

eclipseのRefleshを自動にする

DbUnitを使っていてExcelを書き換えたりすると、パッケージエクスプローラで右クリック→RefleshかF5とかしていたけど、Windows→Preferences→General→Workspaceで「Refresh automatically」にチェックを入れればRefleshが自動になる。

テスティングツール作成

DbUnitを利用してDAOの単体テストのためのベースクラスを作成。 DbUnitのDatabaseTestCaseを継承 getDataSet()メソッドではテストケースの実装クラスと同じディレクトリにあるテストメソッド名と同名のエクセルファイルを読み込む。TestCase#getName()でテストメソッド名が取得できる。 getSetUpOperation()メソッドはデフォルトではDatabaseOperation.CLEAN_INSERTとした。Insertのテスト…

DbUnitのテーブルの主キーを取得する

Column[] columns = table.getTableMetaData()..getPrimaryKeys();

DbUnitのデータセット・テーブルをソートする

IDataSet sortedDataSet = new SortedDataSet(targetDataSet); ITable sortedTable = new SortedTable(targetTable, columnsToSort);

DbUnitであるカラムだけ残した・除いたテーブルを取得する

DefaultColumnFilter.includedColumnsTable(table, new String[] {"columnNames"}); DefaultColumnFilter.excludedColumnsTable(table, new String[] {"columnNames"});

DbUnitのITableからオブジェクトを生成する

private List createBeanList(Class clazz, ITable table) { Column[] columns; try { ITableMetaData metaData = table.getTableMetaData(); columns = metaData.getColumns(); } catch (DataSetException e) { throw new RuntimeException(e); } setTargetF…