使用Spock编写Java函数的单元测试用例时,出现org.apache.poi.EmptyFileException异常

6vl6ewon  于 2023-08-02  发布在  Java
关注(0)|答案(1)|浏览(149)

下面是一个java函数的单元测试用例:

def "should generate claims error file"(){
    given:
    def tempFile = new TempFile()
    def excelErrorRecord = new ExcelErrorRecord(row: 5, col: 4, message: "Test Message")
    HashMap<String, List<ExcelErrorRecord>> errorRecords = new HashMap<>();
    errorRecords.put("Medical",[excelErrorRecord])
    def fileInputStream = Mock(FileInputStream)
    def workBook = Mock(Workbook)
    def file = Mock(File)

    and:
    tempFile.getFile() >> file
    file.length() >> 100
    tempFile.getFile().getAbsolutePath() >> "Temp File.xlsx"
    new FileInputStream(tempFile.getFile().getAbsolutePath()) >> fileInputStream
    new XSSFWorkbook(fileInputStream) >> workBook

    when:
    service.generateClaimsErrorFile(errorRecords, tempFile)

    then:
    noExceptionThrown()
  }

字符串
本测试用例将执行以下java函数:

try (FileInputStream fis = new FileInputStream(tempFile.getFile().getAbsolutePath());
         Workbook workbook = new XSSFWorkbook(fis)) 
{}
catch(){}


上面的测试用例是在Workbook workbook = new XSSFWorkbook(fis)行抛出org.apache.poi.EmptyFileException。我如何解决这个问题,这个问题的原因是什么?

0wi1tuuw

0wi1tuuw1#

不要试图模仿FileFileInputStream。只需使用Spock的@TempFile扩展名来设置一个包含必要内容的临时文件。
这看起来像你期望它被嘲笑

new FileInputStream(tempFile.getFile().getAbsolutePath()) >> fileInputStream
  new XSSFWorkbook(fileInputStream) >> workBook

字符串
然而,这不是它如何工作。
尝试一些沿着的东西,因为我对ApachePOI不熟悉,这个例子可能不起作用,但它应该可以让您开始。

class ASpec extends Specification {
  @TempFile
  File tempFile

  def "should generate claims error file"(){
    given: 'setup test workbook'
    def testWorkBook = XSSFWorkbook()
    // add some testdata to workbook

    and: 'save workbook'
    tempFile.withOutputStream { testWorkBook.write(it) }

    and:
    def excelErrorRecord = new ExcelErrorRecord(row: 5, col: 4, message: "Test Message")
    HashMap<String, List<ExcelErrorRecord>> errorRecords = new HashMap<>();
    errorRecords.put("Medical",[excelErrorRecord])

    when:
    service.generateClaimsErrorFile(errorRecords, tempFile)

    then:
    noExceptionThrown()
}

相关问题