我有一个类FacebookDataExtraction
,它从Excel文件中读取数据并将数据存储为行对象列表,如代码中所示。我已经使用了配置。属性文件以获取文件路径。配置文件的内容。属性文件如下:
FILE_NAME = D:/Refreshed_data_daily/all_hue_posts_in_excel.xlsx。
public class FacebookDataExtraction {
//private static final String FILE_NAME="D:/Refreshed_data_daily/all_hue_posts_in_excel.xlsx";
private static final String SHEET_NAME="nextv54plus_actions";
XSSFWorkbook workbook;
public static void main(String[] args){
FacebookDataExtraction obj= new FacebookDataExtraction();
List<FacebookFields> displayList= new ArrayList<FacebookFields>();
displayList=obj.readFromExcelFile();
System.out.println("The Size of the list is:"+ displayList.size());
//System.out.println(displayList);
}
public List<FacebookFields> readFromExcelFile() {
List<FacebookFields> fbList= new ArrayList<FacebookFields>();
try
{
ReadPropertyFile data= new ReadPropertyFile("config.properties");
FileInputStream fin= new FileInputStream(data.getPropertyFor("FILE_NAME"));
workbook= new XSSFWorkbook(fin);
int sheetIndex=0;
for (Sheet sheet : workbook) {
readSheet(sheet,sheetIndex ++, fbList);}
}catch(FileNotFoundException e){
e.printStackTrace();
}
catch(IOException e){
e.printStackTrace();
}
return fbList;
}
public void readSheet(Sheet sheet, int sheetIndex , List<FacebookFields> fbList) {
if(SHEET_NAME.equals(sheet.getSheetName())){
workbook.removeSheetAt(sheetIndex);
return;
}
for (Row row : sheet){
if (row.getRowNum() > 0)
fbList.add(readRow(row));}
}
private FacebookFields readRow(Row row) {
FacebookFields record= new FacebookFields();
for (Cell cell : row) {
switch (cell.getColumnIndex()) {
case 0: record.setName(cell.getStringCellValue());
break;
case 1: record.setId(cell.getStringCellValue());
break;
case 2: record.setDate(cell.getStringCellValue());
break;
case 3: record.setMessage(cell.getStringCellValue());
break;
case 4: record.setType(cell.getStringCellValue());
break;
case 5: record.setPage(cell.getStringCellValue());
break;
case 6: record.setLikeCount(String.valueOf(cell.getNumericCellValue()));
break;
case 7: record.setCommentCount(String.valueOf(cell.getNumericCellValue()));
break;
case 8: record.setShareCount(String.valueOf(cell.getNumericCellValue()));
break;
default:System.out.println("Missing record at row :" + row.getRowNum() + " column :" + cell.getColumnIndex() );
}
}
return record;
}
public boolean containsData() {
List<FacebookFields> checkList= readFromExcelFile();
return !checkList.isEmpty() ;
}
}
我已经写了测试用例来检查列表即fbList
在方法readFromExcelFile()
被调用后是否包含数据。
@Test
public void testWhetherListConatinsData(){
FacebookDataExtraction fbDataList= new FacebookDataExtraction();
assertEquals(fbDataList.containsData(), true);
}
我得到的建议是,方法readSheet()
可以通过模拟参数Sheet sheet
来测试我如何测试方法readSheet()
我是新的嘲笑,谁能解释一下如何为readSheet()
方法与if
和for
循环测试用例。
您可以创建一个存根的Sheet
;也就是说,创建一个扩展Sheet
的类,并覆盖您想要影响的方法。
当你用public
accessor标记readSheet()
时,你可以调用:readSheet(<instance of your extended Sheet class>, sheetIndex, fbList)
如果你想让这个任务更简单,你也可以使用Mockito。
然而,我认为readSheet
将更适合于单元测试,如果它返回的东西,而不是从调用者访问列表,否则你可以在测试中初始化List<FacebookFields>
,并将其传递到readSheet()
。