在call()
课程的Callable
方法中,我已调用第三方库来执行与iText相关的工作。现在,我打算测试这个public
方法。但是,我对我应该做的事情感到有点困惑。我不应该测试这个类,因为它会进行第三方相关操作吗?如果我应该测试acc。为了测试驱动的方法,我如何在其中使用第三方操作测试这个Callable
方法?
class Foo implements Callable<String> {
@Override
public String call(){
PdfReader pdfReader = new PdfReader(filename);
// do iText, external, library related jobs
return (buffer);
}
}
答案 0 :(得分:0)
不是初始化PdfReader
call
,而是为它创建一个实例字段,并通过传递给构造函数参数的参数对其进行初始化。
private PdfReader pdfReader;
public Foo(PdfReader pdfReader) {
this.pdfReader = pdfReader;
}
然后,您可以模拟PdfReader
并将模拟对象传递给构造函数。设置您对模拟的期望,并在调用call
后验证它们。
答案 1 :(得分:0)
他们最好不要将测试双打(例如模拟)用于第三方对象。 最好为它定义一个接口,您可以使用测试双精度以TDD方式编码,然后在实际使用第三方库的薄层中实现此接口,您可以为其创建集成测试。 / p>
当然,您需要确保完全需要测试双倍,这意味着在测试中无法使用实际的第三方库(例如,通过阅读真实的PDF)。当然,在阅读 PDF的情况下,它不应该对其他测试或相同测试的后续运行产生副作用。