Fight the Future

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

プレゼン、ボランティアコーチします!

勉強会で話したいけど、プレゼンが初めて、苦手という方に無償でコーチします!

  • スライドのレビュー
  • 録画リハへのアドバイス

Twitter@jyukutyoまでメンションでもDMでも。 デブサミやJJUG CCCなど200人規模で登壇しました。海外での登壇も短いながらあり。デブサミ2017では公募スピーカー1位でした!

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

こんなのしたくない??

	@SetUpOperation(value = DatabaseOperationType.CLEAN_INSERT, pathname = "org/dbunitng/dept-emp.xml")
	@Test
	public void verifySelectAllFromDept() {
		// call target method and assert...
	}


要はDbUnitアノテーション対応。
@SetUpOperationでテスト実行前にテストデータを投入する。
アノテーションの属性でDbUnitのDatabaseOperationを指定したり、テストデータのファイルを指定したりできる。


Javaにおいてデータベースと連携した自動テストはDbUnitデファクトスタンダードだけど、なんか面倒なんだよね、DbUnitって。
DatabaseTestCaseを継承したり*1、setUpやtearDownでOperationを指定したり、投入するデータ読み込んだりとか。


アノテーションに対応したらちょっと楽になるかな、とか思った。
なので、作ってみました!*2


さすがに単体ではできないので、TestNGと連携させます。
TestNGのリスナーとしてDbUnitとの連携を実現します。
testng.xmlにリスナーを記述します。

	<listeners>
		<listener class-name="org.dbunitng.listeners.DbUnitNGTestListener"></listener>
	</listeners>

あとはテストメソッドにアノテーションを指定するだけ!
テストデータはDbUnit形式のXMLまたはExcelファイルに記述します。


ここまで書いていたら、ソースを落とせた方がいいと思ったので、SourceForge.JPにプロジェクトを申請しました。
ってニーズはあるのかな??

*1:しなくてもIDatabaseTester実装クラスを使う方法もあるけど

*2:実は会社で開発させてもらってます