障害メモ/DBUnitがリソースを読み込めない

ポケットがチケットでいっぱい

編集 追加
| | | |
2017-04-21 (金) 18:02:17 (117d)
Top / 障害メモ / DBUnitがリソースを読み込めない

キーワード

  • DBUtil
  • gradle build

関連

現象

gradle buildしたときのテストで、DBUnitがリソースを読み込めない。

org.dbunit.dataset.DataSetException: error getting list of tables
	at org.dbunit.dataset.csv.CsvURLProducer.produce(CsvURLProducer.java:115)
	at org.dbunit.dataset.CachedDataSet.<init>(CachedDataSet.java:97)
	at org.dbunit.dataset.CachedDataSet.<init>(CachedDataSet.java:81)
	at org.dbunit.dataset.csv.CsvURLDataSet.<init>(CsvURLDataSet.java:49)
(中略)
Caused by: java.io.FileNotFoundException: C:\path\to\project\build\classes\test\path\to\resouces\table-ordering.txt (指定されたファイルが見つかりません。)
	at java.io.FileInputStream.open0(Native Method)
	at java.io.FileInputStream.open(FileInputStream.java:195)
	at java.io.FileInputStream.<init>(FileInputStream.java:138)
	at java.io.FileInputStream.<init>(FileInputStream.java:93)
	at sun.net.www.protocol.file.FileURLConnection.connect(FileURLConnection.java:90)
	at sun.net.www.protocol.file.FileURLConnection.getInputStream(FileURLConnection.java:188)
	at java.net.URL.openStream(URL.java:1045)
	at org.dbunit.dataset.csv.CsvProducer.getTables(CsvProducer.java:152)
	at org.dbunit.dataset.csv.CsvURLProducer.produce(CsvURLProducer.java:103)

原因

gradleがリソースを出力する先とDBUnitがリソースを入力する元が違う。

gradleの出力先DBUnitの入力元
build/resources/testbuild/classes/test

対策

gradleがリソースを出力する先を変更する。

sourceSets {
	test {
		output.resourcesDir = output.classesDir
	}
}

dependencies{}の下にでも書いてあげるとよい。

備考

STS(Eclipse)で開発しているときでも、まめに端末からビルドしてあげないと後で焦る。

参考