Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在JavaJUnit中使用mocking测试带有参数的方法?_Java_Unit Testing_Mocking_Mockito_Junit4 - Fatal编程技术网

如何在JavaJUnit中使用mocking测试带有参数的方法?

如何在JavaJUnit中使用mocking测试带有参数的方法?,java,unit-testing,mocking,mockito,junit4,Java,Unit Testing,Mocking,Mockito,Junit4,我有一个类FacebookDataExtraction,它从Excel文件中读取数据,并将数据存储为行对象列表,如代码所示。 我已经使用config.properties文件来获取文件路径。config.properties文件的内容包括: 文件\u NAME=D::在\u excel.xlsx中刷新\u数据\u每日/所有\u色调\u帖子 我得到建议,可以通过模拟参数Sheet-Sheet来测试方法readSheet() 如何测试方法readSheet() 我不熟悉mocking,有人能解释一下

我有一个类
FacebookDataExtraction
,它从Excel文件中读取数据,并将数据存储为行对象列表,如代码所示。 我已经使用config.properties文件来获取文件路径。config.properties文件的内容包括:

文件\u NAME=D::在\u excel.xlsx中刷新\u数据\u每日/所有\u色调\u帖子

我得到建议,可以通过模拟参数
Sheet-Sheet
来测试方法
readSheet()
如何测试方法
readSheet()

我不熟悉mocking,有人能解释一下如何使用
readSheet()
方法,使用
if
的测试用例和
for
循环这两种方法吗;也就是说,创建一个扩展
Sheet
并覆盖您想要影响的方法的类

由于您使用
public
访问器标记了
readSheet()
,您可以调用:
readSheet(,sheetIndex,fbList)

或者,如果希望简化此任务,可以使用


然而,我认为
readSheet
更适合于单元测试,如果它返回了一些东西,而不是从调用方访问列表,否则您可以在测试中初始化
列表
,并将其传递到
readSheet()

中。老实说,我不知道如何做,我认为您的类需要更改或重组以支持单元测试。例如,
readSheet()
依赖于全局变量
workbook
,该变量仅在
readFromExcelFile()
中初始化
readSheet()
依赖自身范围之外的变量会使单元测试变得困难和混乱。工作簿可以在readFromExcelFile()中初始化。如何在测试用例中初始化参数列表fbList?您的
readSheet()
方法取决于
readFromExcelFile()
是否为您初始化某些内容。您可以在单元测试设置中调用
readFromExcelFile()
,但是当您最终从文件系统中读取时,这会破坏模拟表的目的。我建议大家仔细阅读单元测试以及如何使方法更加独立。有没有修改代码的建议?我的想法是readSheet()方法将返回行对象列表,以便在方法中定义和初始化工作簿。其余的都一样。我不知道它是否解决了这个问题,因为我们将有readRow方法留下来进行测试!
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() ;
    }

}
@Test
    public void testWhetherListConatinsData(){
        FacebookDataExtraction fbDataList= new FacebookDataExtraction();
        assertEquals(fbDataList.containsData(), true);  
    }