我正在嘗試使用Specs2編寫下列規範,但似乎無法讓它工作,編譯器總是抱怨「沒有隱式視圖可用單位=> org.specs2.execute.Result「。試圖用閉包編寫測試最終失敗Specs2
這裏的測試來源:
"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 "
})
但仍然無法正常工作。
EDIT 2
由於拉斐爾的答案,這使得它的工作最終的代碼爲:
def deleteWhenDone[T](files : File*) (fn : => T) : T = {
try {
fn
} finally {
IOUtils.deleteFiles(files)
}
}
我錯過了方法的返回類型。謝謝!
謝謝,就是這樣! –