« 途中で名前が変わるメール(笑) | 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


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

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