« 途中で名前が変わるメール(笑) | Main | Subversion実践入門 »

2005.08.30

Excelにテストデータを記述してJUnit

 JavaWorld 10月号にExcelを用いたJUnitのテストケース作成という内容の記事があったので、Excelの1行を1つのパターンのテストケースとみなしてJUnitを支援するプログラムを書いてみました(JExcelApiを利用)。なお、コメントの一部を省略しています。

import java.io.FileInputStream;
import java.io.InputStream;
import junit.framework.Assert;
import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
/**
* Excelファイルの内容を元にアサーション処理を実行します。
* なお、Excelファイルの1行目はコメント行としてスキップされます。
*/
public abstract class ExcelLoader {
private InputStream inputStream;
private String[] cellValue;
public ExcelLoader(InputStream inputStream) {
this.inputStream = inputStream;
}
/**
* 指定されたシート名のデータを用いてアサーションを実行します。
* なお、1行目のデータはコメントとしてスキップされます。
* @param sheetName
* @throws Exception
*/
public void executeAssertion(String sheetName) throws Exception {
try {
Workbook workbook = null;
workbook = Workbook.getWorkbook(inputStream);
Sheet sheet = workbook.getSheet(sheetName);
int rowCount = sheet.getRows();
for (int i=1; i<rowCount; i++) {
Cell[] cells = sheet.getRow(i);
cellValue = new String[cells.length];
for (int j=0; j<cellValue.length; j++) {
cellValue[j] = cells[j].getContents();
}
assertEachLine(i);
}
} finally {
if (inputStream != null) {
try { inputStream.close(); } catch (Exception e) { e.printStackTrace(); }
}
}
}
/**
* Excelデータ1行につき1回呼び出されます。
* このメソッドをオーバーライドしてアサーション処理の実体を記述してください。
* @param rowNo
* @throws Exception
*/
abstract protected void assertEachLine(int rowNo) throws Exception;
}

 実際に使う際は、このクラスを継承したクラスを(インナークラスとして)作成して、assertEachLineメソッド内で、A列の値とB列の値を元にテストを行うとC列の値となるかどうかをチェックする、というような感じの使い方をイメージしています。

|

« 途中で名前が変わるメール(笑) | Main | Subversion実践入門 »

Java」カテゴリの記事

Comments

Post a comment



(Not displayed with comment.)


Comments are moderated, and will not appear on this weblog until the author has approved them.



TrackBack

TrackBack URL for this entry:
http://app.cocolog-nifty.com/t/trackback/3959/5707149

Listed below are links to weblogs that reference Excelにテストデータを記述してJUnit:

« 途中で名前が変わるメール(笑) | Main | Subversion実践入門 »