Fight the Future

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

TestNG

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

ライブラリDbUnitNGで、 ネストしたBeanをDbUnitのデータセットに変換できるように対応しました。 ネストしたBeanとは次のようなことを意味してます。 あるBeanのプロパティとして、 別のBeanを持つ 別のBeanをListで持つ 別のBeanを配列で持つ テストコード…

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

BeanのListからDataSetへ変換する部分について、テストコードを記述しました。 TestNGでテストしてます。 Beanがネストしない(Beanが他のBeanをプロパティとして持たない)限り、 リストをデータセットに変換できるようになってます。 # いくつかバグを修正し…

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

DbUnitで期待値をXMLやExcelに記述すると思うけど、 日付の書式は基本的にDate.valueOf()やTimestamp.valueOf()で有効な書式を記述する。 こんな感じ。 <dataset> <datebean javaUtilDate="2008-08-08" javaSqlDate="2008-08-08 15:20:11" timestamp="2008-08-08 15:20:11.000" /> </dataset> 試したけど、java.util.Dateでもjava.sql.Date…

DbUnitのFlatXmlDataSetの注意点

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

TestNGとJUnit4における、テストメソッドへのパラメータの考え方の違い

たとえば数値の引数を2つとって、それを足し算したりかけ算したりするメソッドをテストするとして。 public int add(int a, int b) public int multiple(int a, int b) みたいな。 こういうメソッドをテストする場合、引数のバリエーションを考えてテストす…

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 …

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

DbUnitの弱点はBeanのListとDataSetを比較できないことから考えて、実際に比較する方法を考えようと思う。 方法は2つある。 BeanのListをIDataSet実装オブジェクトに変換する DataSetから比較するBeanのListに変換する 2の方法だと、プリミティブなプロパテ…

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

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

TestNGとJUnit4のもっとも大きな違い

TestNGとJUnit4のもっとも大きな違いはテストクラスのインスタンス生成だ。 あるテストクラスに複数のテストメソッドがあるとき、2つのフレームワークはこう振る舞う。 TestNGは(基本的に)テストクラスのインスタンスは1つしか作らない JUnit4はテストメソッ…

DbUnitでDatabaseOperation.DELETEするときのXML

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

テストをSkipするときはITestListener#onTestStart()は呼び出されない

ITestListenerインタフェースのonTestStartメソッドは、 「Invoked each time before a test will be invoked.」なので(特にwill be invokedに注目)、 dependsOnXXX属性を使っていてテストがSkipされるときはonTestStart()メソッドは呼び出されない。

testng.xmlの<suite-files>

バージョン5.3から追加された要素。 要は他のテストスイートファイルを取り込める。 <suite-files> <suite-file path="ファイルのパス"> </suite-files> </suite-files> ちなみにファイル間のパラメータの継承とかはないそうです。 Indeed, inheritance of parameters in testng.xml files is not supported, for a couple of reasons: I …

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

ソースはhttp://sourceforge.jp/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 name="username" value="ユーザー名"></parameter>

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

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

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

こんなのしたくない?? @SetUpOperation(value = DatabaseOperationType.CLEAN_INSERT, pathname = "org/dbunitng/dept-emp.xml") @Test public void verifySelectAllFromDept() { // call target method and assert... } 要はDbUnitのアノテーション対応。…

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

TestNGとDbUnitを連携させることで、テストクラスはTestCaseを継承する必要がなくなる。 TestCaseを継承する代わりに、XXDatabaseTesterというDbUnitにあるクラスを使う。 JdbcDatabaseTester DataSourceDatabaseTester DriverManagerからConnectionを作るか…

JavaのテスティングフレームワークはJUnitだけじゃないので

TestNGというテスティングフレームワークがある。 JavaにおけるテスティングフレームワークはもちろんJUnitがデファクトスタンダードだ。 でも、TestNGにもスゴくいいところがある。 TestNG is a testing framework inspired from JUnit and NUnit but intro…

TestNGをeclipseで利用する

ものすごく簡単だ。プラグインを1つ入れるだけだ。 http://testng.org/doc/eclipse.html そしてeclipseのプロジェクトでTestNGのjarをビルドパスに加えるだけだ。 テストの実行もJUnitのときと操作が変わるわけじゃないので、新しい操作を覚える必要もない。…