S2Dao
readXlsAllReplaceDb()と外部キー制約
readXlsAllReplaceDb()は、シートの逆順でテーブルの内容を削除し、シート順でデータを挿入する。
Aテーブルの外部キーがBテーブルの列を指しているとする。Excelのシート順は、B,Aの並びにしないと外部キー制約となる。
setUp()・setUpXxx()で、readXlsAllReplaceDb()を呼び出すとエラーを吐く
setUp()・setUpXxx()で、readXlsAllReplaceDb()を呼び出そうとすると、DataSourceがないとエラーが出る。
org.seasar.framework.exception.EmptyRuntimeException: [ESSR0007]dataSourceはnullあるいは空であってはいけません at org.seasar.extension.unit.S2TestCase.getDataSource(S2TestCase.java:167) at org.seasar.extension.unit.S2TestCase.deleteTable(S2TestCase.java:453) at org.seasar.extension.unit.S2TestCase.readXlsAllReplaceDb(S2TestCase.java:383) at org.seasar.extension.unit.S2TestCase.readXlsAllReplaceDb(S2TestCase.java:369) at dao.sample3.DrinkDaoTest.setUpGetAllDrinks(DrinkDaoTest.java:38)
S2FrameworkTestCaseクラス内で、次のような呼び出しになっているため。setUpAfterContainerInit()が呼ばれた時に、DataSourceが設定される。
それ以前に呼びたいときは、DataSourceを設定するメソッドを自分で呼び出さないといけない。
// S2FrameworkTestCaseクラス /** * @see junit.framework.TestCase#runBare() */ public void runBare() throws Throwable { setUpContainer(); try { setUp(); try { setUpForEachTestMethod(); try { container.init(); try { setUpAfterContainerInit(); try { bindFields(); try { setUpAfterBindFields(); try { doRunTest(); } finally { tearDownBeforeUnbindFields(); } } finally { unbindFields(); } } finally { tearDownBeforeContainerDestroy(); } } finally { container.destroy(); } } finally { tearDownForEachTestMethod(); } } finally { tearDown(); } } finally { tearDownContainer(); } }
// S2TestCaseクラス protected void setUpAfterContainerInit() throws Throwable { super.setUpAfterContainerInit(); setupDataSource(); }