読者です 読者をやめる 読者になる 読者になる

量産型エンジニアの憂鬱

きっと僕は何物にもなれない。

DBUnitでxmlからインサートするときに最初のレコードでnullを指定したい

Java テスト

DBUnitが便利ですね。
Spring Bootにおけるテストでは以下のように書けば毎回データセットをインサートしてくれます。

最初のレコードでnullを指定したい場合にちょっと戸惑いました。

二つ目以降のレコードに null を指定したい場合は、エレメントにカラムを書かなければ null になります。

f:id:duck8823:20161106001224p:plain

最初のレコードに null を指定して、二つ目以降のレコードには任意の値を指定したい場合、困ったことになります。
データセットを以下のように書いてインサートすると

f:id:duck8823:20161106001710p:plain

二つ目のレコードのnameカラムに値が入ってくれません。
どうやら一つ目のレコードに記述されているカラム名しか見ないようです。
二つ目以降のカラムに存在しないカラム名を指定してもエラーになりません。

ReplacementDataSet を利用することで null をインサートすることが可能になります。

文字列 {null} を null に変換しています。
データセットは次のように用意します。

f:id:duck8823:20161106002529p:plain

これで null がインサートされました。
普段はアノテーションでデータセットを指定できる TestExecutionListener を作ってこれを利用しています。
テスト毎にデータセットを指定するのに、以下のようにアノテーションで指定出来て便利です。