DBUnit の検索結果:
DbUnitNGのバージョン0.1をリリースしました。 DbUnitのSetUpOperationとTearDownOperatonをアノテーション対応しました。 BeanのListをDbUnitのIDataSetに変換するBeanListConverterを実装しました。 DbUnitのAssertionに対するヘルパークラスAssertionHelperクラスを実装しました。 以上すべてテストコードを記述済です。 基本的な使い方はSourceForgeのWikiに記述して…
DbUnit + TestNGのライブラリでは、@SetUpOperationなどのアノテーションを使えるわけですが、これはTestNGでリスナーインタフェースが用意されているおかげです。 TestNGでは、リスナーインタフェースが4つ用意されています。 リスナー 説明 IMethodInterceptor テストメソッド実行前に呼び出されるリスナー。実行するテストメソッドを選択することができる。 IReporter テスト結果のレポート処理に関するリスナー。 ISuiteL…
ライブラリDbUnitNGで、 ネストしたBeanをDbUnitのデータセットに変換できるように対応しました。 ネストしたBeanとは次のようなことを意味してます。 あるBeanのプロパティとして、 別のBeanを持つ 別のBeanをListで持つ 別のBeanを配列で持つ テストコードも記述して、コミットしています。 ネストしたBeanをどんなDataSetにしているかというと、Beanの型ごとにDbUnitのテーブルとしています。 つまりこういうクラス public cl…
…eanがネストしない(Beanが他のBeanをプロパティとして持たない)限り、 リストをデータセットに変換できるようになってます。 # いくつかバグを修正しました。 BeanがDateやBigDecimalをプロパティに持っても、変換してDataSetの形でアサーションできるので、けっこう実用的だと思います。 ライブラリはここにあります。DbUnitNG プロジェクト日本語トップページ - SourceForge.JP trunkをダウンロードすればJavadocも見れます。
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は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"…
DbUnitNG Wiki - SourceForge.JP 今までBlogに書いていた、ライブラリの使い方をSourceForgeのWikiにまとめました。 よかったら見てみてください!
…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に…
DbUnitの弱点はBeanのListとDataSetを比較できないことから考えて、実際に比較する方法を考えようと思う。 方法は2つある。 BeanのListをIDataSet実装オブジェクトに変換する DataSetから比較するBeanのListに変換する 2の方法だと、プリミティブなプロパティだけならいいけど、集約してるときとか変換するのが大変そう(あるBeanが違うBeanのListをプロパティとして持つなど)。 なので1の方法で考える。基本的にクラスのメタ情報を使えば…
DbUnitを使うにあたって一番問題になることは、Daoから取得したJava BeansのListとExcelの期待値を比較できないことだ。 Excel(XML)の期待値はDbUnitではDataSetとして表す。 だけど、DbUnitのAssertクラスであるorg.dbunit.AssertionクラスではDataSet同士しか比較できない。 assertEquals(IDataSet expectedDataSet, IDataSet actualDataSet) as…
<?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"/> <…
…/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.JP: Project Info - DbUnitNG
…me = "org/dbunitng/dept-emp.xml") @Test public void verifySelectAllFromDept() { // call target method and assert... } 要はDbUnitのアノテーション対応。 @SetUpOperationでテスト実行前にテストデータを投入する。 アノテーションの属性でDbUnitのDatabaseOperationを指定したり、テストデータのファイルを指定したりできる。 Ja…
TestNGとDbUnitを連携させることで、テストクラスはTestCaseを継承する必要がなくなる。 TestCaseを継承する代わりに、XXDatabaseTesterというDbUnitにあるクラスを使う。 JdbcDatabaseTester DataSourceDatabaseTester DriverManagerからConnectionを作るか、DataSourceからConnectionを作るかで使い分ける。 たとえばテスト実行前のsetup処理はこんな感じ。 …
…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のIDataSetはこれで比較できました。 ExtendedAssertion.assertEquals(expected, actual);でも、たとえばタイムスタンプの列とかは比較できない、という場合もあると思います。そのときは、 IDataSet dataSet; for (ITableIterator i = dataSet.iterator(); i.next();) { ITable table = i.getTable(); table = Defa…
…ブルのデータですが、DbUnitのIDatabaseConnectionにはcreateDataSet()というメソッドがあります。この戻り値がIDataSet型なので、先ほどのexcelから作ったXlsDataSetと比較すればテーブルと期待値の比較ができる、というわけです。createDataSet()は引数なしで呼び出すとそのスキーマの全テーブルを取ってきますが、String配列でテーブルを指定することができます。 IDataSet actual = getConnec…
…2つのメソッドです。DbUnitのデフォルトが上のソース。getSetUpOperation()で初期化の際のDBの状態を、getTearDownOperation()でテストメソッド実行後のDBの状態を設定できます。どちらもDatabaseOperationオブジェクトを返しますが、このクラスにはいろいろな定数があるので、それを使うだけでいいです。DatabaseOperation.CLEAN_INSERTは初期化対象のテーブルのデータをすべて削除してから初期化データを登録…
…しかも「大文字」で。DbUnitの内部でスキーマは大文字で保持しているので、小文字で渡すとダメでした。ケースは無視してほしいなあ。さらにDBごとの設定もできます。 DatabaseConfig config = databaseConnection.getConfig(); config.setProperty(DatabaseConfig.PROPERTY_DATATYPE_FACTORY, new Db2DataTypeFactory());DBの文字列とか数値とか日付っ…
…対応するわけですけど、各セルの値の取得はXlsTable#getValue()で実装されてます。話変わって、DbUnitでのexcelへのアクセスはJakarta POIを利用してます。バグではない有名な話があって、セルの値を文字列として取得すると末尾にスペースが付く場合があるんです。excelのリッチテキスト形式がなんとか。。。って感じで詳しくはわかってないんですが。なので文字列はトリムして返したいなあと思ったら、XlsTableはpublicじゃなかった!って感じでした。
DbUnitでexcelファイルを読み込み、DBへ登録する初期値やテスト結果の期待値を取得します。それにはorg.dbunit.dataset.excel.XlsDataSetを使います。このXlsDataSetはコンストラクタでjava.io.Fileかjava.io,InputStreamを渡します。では、DbUnitを拡張して独自にテストフレームワークを作成するとして、excelファイルはどう読み込みます??僕はクラスローダを取ってきてClassLoader#getRe…
DbUnitの方ではスキーマを大文字で保持しているので、IDatabaseConnectionを生成するときにはスキーマは大文字にして渡しておこう。
…公開しています! 記事自体は2年前くらいに翻訳したもので古いんですけど、DbUnitの基本的な使い方が解説されています。 DbUnitというのはJUnitを拡張したもので、データベースアクセスの単体テストを行うためのツールです。 テストの実行前とxmlやExcelを用いてデータベースのテーブルに必要なデータをセットしたり、実行後にデータを消すといったことができるため、データベースにアクセスするクラスでも単体テストを自動化、反復化することができます。 よかったら読んでください!
DbUnitを使っていてExcelを書き換えたりすると、パッケージエクスプローラで右クリック→RefleshかF5とかしていたけど、Windows→Preferences→General→Workspaceで「Refresh automatically」にチェックを入れればRefleshが自動になる。
DbUnitを利用してDAOの単体テストのためのベースクラスを作成。 DbUnitのDatabaseTestCaseを継承 getDataSet()メソッドではテストケースの実装クラスと同じディレクトリにあるテストメソッド名と同名のエクセルファイルを読み込む。TestCase#getName()でテストメソッド名が取得できる。 getSetUpOperation()メソッドはデフォルトではDatabaseOperation.CLEAN_INSERTとした。Insertのテスト…
Column[] columns = table.getTableMetaData()..getPrimaryKeys();
IDataSet sortedDataSet = new SortedDataSet(targetDataSet); ITable sortedTable = new SortedTable(targetTable, columnsToSort);
DefaultColumnFilter.includedColumnsTable(table, new String[] {"columnNames"}); DefaultColumnFilter.excludedColumnsTable(table, new String[] {"columnNames"});
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…