当前位置: 首页 > 面试题库 >

PowerMock的ExpectNew()并未按预期嘲笑构造函数

储阳曦
2023-03-14
问题内容

我正在尝试了解各种模拟库的来龙去脉,并且PowerMock(特别是EasyMock扩展名)在列表的后面。我正在尝试模拟构造函数,并且在尝试复制它们时提供的示例没有相同的响应。据我所知,它永远不会嘲笑构造函数,只会像正常一样继续进行。

这是测试类:

@RunWith(PowerMockRunner.class)
@PrepareForTest({Writer.class})
public class FaultInjectionSituationTest {

    @Test
    public void testActionFail() throws Exception {
        FaultInjectionSituation fis = new FaultInjectionSituation();
        PowerMock.expectNew(Writer.class, "test")
           .andThrow(new IOException("thrown from mock"));
        PowerMock.replay(Writer.class);
        System.out.println(fis.action());
        PowerMock.verify(Writer.class);
    }

}

我尝试用EasyMock.isA(String.class)替换“测试”,但结果相同。

这是FaultInjectionSituation:

public class FaultInjectionSituation {

    public String action(){
        Writer w;
        try {
            w = new Writer("test");
        } catch (IOException e) {
            System.out.println("thrown: " + e.getMessage());
            return e.getLocalizedMessage();
        }
        return "returned without throw";
    }
}

“作家”只不过是一个类的外壳:

public class Writer {
    public Writer(String s) throws IOException {
    }

    public Writer() throws IOException{
    }
}

运行测试时,它会打印出“不抛出异常返回”,表明从未抛出异常。


问题答案:

您还需要准备调用构造函数的类,因此PowerMock知道期望模拟构造函数的html" target="_blank">调用。尝试使用以下命令更新代码:

@RunWith(PowerMockRunner.class)
@PrepareForTest({Writer.class, FaultInjectionSituation.class})
public class FaultInjectionSituationTest { 
 // as before
}


 类似资料:
  • 我想模拟Date对象的构造函数。但它并没有像我预期的那样工作<假如我有这样的服务。 我写了下面的测试 结果是: 组织。opentest4j。断言失败错误: 预计时间:2020年2月1日星期六00:00:00 CST实际时间:2022年5月9日星期一18:35:05 CST mock之后,服务将返回mockDate对象。但事实并非如此。有趣的是,如果我在测试中而不是在服务中调用新日期,我会得到正确的

  • 例如,我有一个这样的课; 我要做的是为模拟的构造函数编写单元测试。 如果是静态的,那么这将很容易,因为我可以使用然后调用构造函数。 有人知道有什么办法吗?

  • 我提到了这个答案,我该如何模拟java。时间本地日期。now()关于如何模拟我的LocalDateTime。now()调用。我基本上遵循了所有步骤,但只使用了LocalDateTime而不是LocalDate。 我的代码的功能是这样的,它应该只在一小时的第15或45分钟运行。因此,我将LOCAL\u DATE\u TIME静态变量设置为: 然后在我的@Before测试方法中,我有以下内容: 这是2

  • 我有一个groovy函数,它执行一些日期操作。返回12个月前的日期。该日期被编码并存储到变量中。 片段: 上述代码与JSR223采样器配合使用效果良好。此外,变量名及其值将显示在调试采样器中。 但是,当我将此代码与GET HTTP请求一起使用时。该值不会被替换。 请求: 除groovy部分外,所有值都被正确替换。我错过了什么吗。调试采样器不显示名为Policy_ExpiryDate的变量。

  • 运行jUnit时的异常 我想测试这个类,下面是测试方法 运行junit会产生以下异常

  • 我正在解决反向字符串问题。我想知道为什么交换2 char的帮助函数在我的代码中不起作用。但如果我在while循环中编写交换代码,它就可以工作。