gpt4 book ai didi

scala - 最终在 Specs2 上尝试编写带有闭包的测试失败

转载 作者:行者123 更新时间:2023-11-28 20:03:29 25 4
gpt4 key购买 nike

我正在尝试使用 Specs2 编写以下规范,但似乎无法使其正常工作,编译器总是提示“Unit => org.specs2.execute.Result 中没有可用的隐式 View ”。

这是测试源:

    "generate the correct output when merging an extraction" in {
val source = new File("src/test/resources/sample-docs/text-and-image-on-page-2.pdf")
val output = this.extractor.extract(source)
val pdfGenerator = new ITextPdfGenerator()
val processor = new ExecutableProcessor()

val ocrInput = IOUtils.createTempFile("ocr_input", "pdf")
val ocrOutput = IOUtils.createTempFile("ocr_output", "pdf")

deleteWhenDone[MatchResult[Any]](output.getFullTextFile, ocrInput, ocrOutput) ( {

pdfGenerator.generatePdf(source, ocrInput, output.getPagesWithImages)
processor.process(ocrInput, ocrOutput)

this.extractor.mergeExtraction(output, ocrOutput)

IOUtils.readFile(output.getFullTextFile) === """sample text on line 1 page 1 sample text on line 2 page 1 sample text on line 1 page 3 sample text on line 2 page 3 """

})

}

完成后删除功能如下:

def deleteWhenDone[T]( files : File* ) ( fn : => T ) {
try {
fn
} finally {
IOUtils.deleteFiles( files )
}
}

如果这一行在规范的末尾,它确实有效:

IOUtils.readFile(output.getFullTextFile) === "sample text on line 1 page 1 sample text on line 2 page 1 sample text on line 1 page 3 sample text on line 2 page 3 "

为什么它会像这样失败,我该怎么做才能继续使用闭包并让测试通过编译?

编辑

将 deleteWhenDone 调用更改为此:

deleteWhenDone[Result](output.getFullTextFile, ocrInput, ocrOutput) ( {

pdfGenerator.generatePdf(source, ocrInput, output.getPagesWithImages)
processor.process(ocrInput, ocrOutput)

this.extractor.mergeExtraction(output, ocrOutput)

IOUtils.readFile(output.getFullTextFile) === "sample text on line 1 page 1 sample text on line 2 page 1 sample text on line 1 page 3 sample text on line 2 page 3 "

})

但还是不行。

编辑 2

感谢 Rafael 的回答,使它工作的最终代码是:

def deleteWhenDone[T]( files : File* ) ( fn : => T ) : T = {
try {
fn
} finally {
IOUtils.deleteFiles( files )
}
}

我错过了方法返回类型。谢谢!

最佳答案

deleteWhenDone 函数的结果类型为 Unit,这与 in 参数的预期类型不兼容。您可以通过在定义中添加等号将其更改为返回 T:

def deleteWhenDone[T]( files : File* ) ( fn : => T ) = {
try {
fn
} finally {
IOUtils.deleteFiles( files )
}
}

关于scala - 最终在 Specs2 上尝试编写带有闭包的测试失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8227696/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com