【发布时间】:2016-04-16 17:11:46
【问题描述】:
public class FakeExcelSheet implements Sheet
{
private final Map<Integer, FakeExcelRow> fakeSheet = new HashMap<Integer, FakeExcelRow>();
@Override
public Row createRow(int rowNum)
{
Row row = new FakeExcelRow(rowNum, fakeSheet);
fakeSheet.put(rowNum, (FakeExcelRow)row);
return row;
}
@Override
public Row getRow(int rowNum)
{
if (fakeSheet.get(rowNum) != null)
{
return fakeSheet.get(rowNum);
}
else
{
return createRow(rowNum);
}
}
/**Other unimplemented methods of Apache POI class Sheet**/
}
public class FakeExcelRow implements Row
{
private int rowNum;
private Map<Integer, FakeExcelRow> sheet;
private List<Object> cellList = new LinkedList<Object>();
public FakeExcelRow(int rowNum , Map<Integer,FakeExcelRow> sheet)
{
this.rowNum = rowNum;
this.sheet = sheet;
}
@Override
public Cell createCell(int colNum)
{
return new FakeExcelCell(colNum, rowNum, sheet);
}
/**Other unimplemented methods of Apache POI class Row**/
}
public class FakeExcelCell implements Cell
{
private int colNum;
private int rowNum;
private Map<Integer, FakeExcelRow> sheet;
public FakeExcelCell(int colNum, int rowNum, Map<Integer, FakeExcelRow> sheet)
{
this.colNum = colNum;
this.rowNum = rowNum;
this.sheet = sheet;
}
public void setCellValue(String value)
{
if(sheet != null)
{
FakeExcelRow fakeExcelRow = sheet.get(rowNum);
List<Object> cellList = fakeExcelRow.getCellList();
cellList.add(value);
}
}
/**Other unimplemented methods of Apache POI class Cell**/
}
我必须像这样测试使用 ExcelWriter 类的受保护方法 writeToCell 的类服务:
public class ServiceImpl
{
........
.
.
private ExcelWriter excelWriter;
private Sheet sheet;
private void handleRequest()
{
while("Till there are more rows")
{
excelWriter.writeDetailsForCategory(List<String> listOfItems)
}
}
}
ExcelWriter 类是这样设计的:
public class ExcelWriter()
{
protected Sheet sheet;
public void writeDetailsForCategory(List<String> listOfItems)
{
for(String item : listOfItems)
{
writeToCell(rowNum, columnNum, value, sheet);
columnNum++;
}
}
}
writeToCell() 方法设计有受保护的访问修饰符:
protected void writeCell(int rowNum, int colNum, String value, Sheet sheet)
{
if (value == null)
{
return;
}
Row row = sheet.getRow(rowNum);
if (row == null)
{
row = sheet.createRow(rowNum);
}
Cell cell = row.createCell(colNum);
cell.setCellValue(value);
}
我必须对使用 ExcelWriter 的 writeDetailsForCategory 的 ServiceImpl 类的 handleRequest 方法进行单元测试,该方法使用受保护的方法 writeToCell。我已经在writeToCell 方法中传递了FakeExcelSheet。在此之后我将断言Map <Object, FakeExcelRow> 的值。我应该如何在protectedwriteToCell方法中传入fakeExcelSheet参数?我的限制是我只能使用 Mockito 或 PowerMockito。
【问题讨论】:
标签: java unit-testing apache-poi mockito powermockito