主なライブラリ構成は以下の通りになりました。
- JUnit3.8.2
- DBUnit2.4.9
- POI3.7
下記に記載がある通り、対応します。
JUnit - ふなWiki - xlsx をデータとして利用する
DBUnitでXLSXを扱うように変更する場合、POIの公式に記載してある通りに対応すればOKです。
Apache POI - Upgrading to POI 3.5, including converting existing HSSF Usermodel code to SS Usermodel (for XSSF and HSSF)
自前で対応した後、DBUnitが正式に対応したので、以下をパッチすれば良いと思います。
試してはいないですが、パッと見た感じだと私が対応した内容と同じ感じでした。
dbUnit / Git / Commit [c6a6ba] Apache POI liblary version up from "3.2-FINAL" to "3.11".
ついでに、読み込んだExcelの日時がズレてしまう問題に対応します。
以下のブログに言及がありますが、独自でXLSX対応しちゃうついでに、こちらもコードを直しちゃいます。
山下寛人オフィシャルブログ - DBUnit Excelロード時の時刻データ
対応する箇所は、以下の通りです。
org.dbunit.dataset.excel.XlsTable
    protected Object getDateValue(Cell cell) 
    {
        logger.debug("getDateValue(cell={}) - start", cell);
        
        double numericValue = cell.getNumericCellValue();
        Date date = DateUtil.getJavaDate(numericValue);
        // Add the timezone offset again because it was subtracted automatically by Apache-POI (we need UTC)
        long tzOffset = TimeZone.getDefault().getOffset(date.getTime());// この行をコメントアウトする。
        date = new Date(date.getTime() + tzOffset);                     // この行をコメントアウトする。
        return new Long(date.getTime());
        
        //TODO use a calendar for XLS Date objects when it is supported better by POI
//        HSSFCellStyle style = cell.getCellStyle();
//        HSSFDataFormatter formatter = new HSSFDataFormatter();
//        Format f = formatter.createFormat(cell);
//      String formatted = fomatter.formatCellValue(cell);
//System.out.println("###"+formatted);
//        Date dateValue = cell.getDateCellValue();
    }とりあえず、これで問題なくテストできています。
 
0 件のコメント:
コメントを投稿