如何测试仅使用第三方库操作的Callable方法?

时间:2014-08-02 16:54:45

标签: java mockito

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);
    }
}

2 个答案:

答案 0 :(得分:0)

不是初始化PdfReader call,而是为它创建一个实例字段,并通过传递给构造函数参数的参数对其进行初始化。

private PdfReader pdfReader;
public Foo(PdfReader pdfReader) {
    this.pdfReader = pdfReader;
}

然后,您可以模拟PdfReader并将模拟对象传递给构造函数。设置您对模拟的期望,并在调用call后验证它们。

答案 1 :(得分:0)

他们最好不要将测试双打(例如模拟)用于第三方对象。 最好为它定义一个接口,您可以使用测试双精度以TDD方式编码,然后在实际使用第三方库的薄层中实现此接口,您可以为其创建集成测试。 / p>

当然,您需要确保完全需要测试双倍,这意味着在测试中无法使用实际的第三方库(例如,通过阅读真实的PDF)。当然,在阅读 PDF的情况下,它不应该对其他测试或相同测试的后续运行产生副作用。