結果のテスト、実装ではありません。
I.e.セルを書き込むと、そのセルからその値を読み戻すことができますか?
はまた、あなたはあなただけのクラスのパブリックインターフェイスをテストする必要がある必要があり、私たちにprotected
方法を示しました。パブリックインターフェイスを介して結果が表示されない場合は、クラスが多すぎる可能性があります(単体責任原則)。
はしかし、他の考慮事項は、Apache POIを読み、実際のファイルに書き込んでいるので、これらのテストを書くことが少し難しくなり、彼らは遅くなり、速度や脆弱性のものです。いくつかのテストではOKですが、スイート全体がファイルを読み書きしている場合は遅くなり、テストスイート全体が数秒で理想的に動作するはずです。
だから私はExcelシートとあなたがそれをやりたいをカプセル化するインターフェイスを作成し、これは次のようになります。
public interface StringGrid {
String readCell(int rowNum, int colNum);
void writeCell(int rowNum, int colNum, String value);
}
今、私は自動テストなしで迅速な実装を行う可能性があり、あるいはほんの数Apache POIについての簡単なテストですが、私のスイートの残りの部分は、StringGrid
のFakeの実装に対してテストして、の高速で実行することができます。のコードを実行しています。
したがって、これらは次のようになります。
だけそのテストや生番組で使用される実際の実装を、。
public final class ApacheSheetStringGrid implements StringGrid {
private final Sheet theApacheSheet;
public ApacheSheetStringGrid(Sheet theApacheSheet) {
this.theApacheSheet = theApacheSheet;
}
public String readCell(int rowNum, int colNum){
...
}
public void writeCell(int rowNum, int colNum, String value) {
Row row = theApacheSheet.getRow(rowNum);
Cell cell = row.createCell(colNum);
cell.setCellValue();
}
}
フェイク(StringGrid
の作業、高速で、メモリ内の唯一の実装が)、他のすべてのテストのために:
public final class FakeStringGrid implements StringGrid {
private final Map<String, String> contents = new HashMap<String, String>();
private static String getKey(int rowNum, int colNum) {
return rowNum + ", " + colNum;
}
public String readCell(int rowNum, int colNum){
return contents.get(getKey(rowNum, colNum));
}
public void writeCell(int rowNum, int colNum, String value) {
contents.put(getKey(rowNum, colNum), value);
}
}
これは、余分な利点を持っている、あなたは後でライブの実装を入れ替えることができますおそらく他のPOIアプローチやGoogleシート実装のいずれかを使用して、いくつかのテストと新しい実装を追加するだけで、コードを変更する必要はありません(Closed Principleを開きます)。
Apache POIメソッドの単体テストを行う必要はありません。それらをモックするだけです。また、あなたが使っていないメソッドだけを模倣する –
@KP私はApache POIのテストケースを書いていません。私は自分の方法で書いています。 – Ashley