【问题标题】:PowerMockito mocking constructor for specific case and not others针对特定情况而不是其他情况的 PowerMockito 模拟构造函数
【发布时间】:2017-11-08 14:12:37
【问题描述】:

我在编写 JUnit 测试时使用 PowerMockito。我正在尝试测试一段遗留代码。部分方法代码如下:

try(ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(zipFileLocation)))
{
    handleZipDir(rootDir, directoryToZip, zos);
}

我想模拟“new FileOutputStream(zipFileLocation)”调用,并且可以使用 powerMockito 成功地做到这一点。

问题是我只想模拟这个电话。我不想模拟代码的其他部分调用“new FileOutputStream(...)”,而是希望它调用真正的构造函数。

我似乎无法弄清楚如何使用 PowerMockito 做到这一点。

有谁知道如何模拟对构造函数的特定调用而不是其他人?

【问题讨论】:

    标签: java unit-testing junit powermock powermockito


    【解决方案1】:

    尝试其中一种最适合您的方案:

    PowerMockito.whenNew(ZipOutputStream.class).withAnyArguments().thenReturn(myMockZipOutputStream);

    PowerMockito.whenNew(ZipOutputStream.class).withArguments(any(FileOutputStream.class).thenReturn(myMockZipOutputStream);

    【讨论】:

    • 我已经试过了,可惜我做不到。 zipFileLocation 将不是可访问的位置,因此在创建参数 FileOutputStream 时会引发异常。这个测试的重点是确保代码可以处理这个特殊的 zipFileLocation,所以我也不能改变它。
    猜你喜欢
    • 2018-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-12
    • 2020-05-31
    • 2013-07-05
    • 1970-01-01
    • 2011-07-04
    相关资源
    最近更新 更多