【问题标题】:PowerMockito testing legacy codePowerMockito 测试遗留代码
【发布时间】:2013-02-12 01:17:12
【问题描述】:

我正在尝试测试一些严重依赖静态方法调用的遗留代码。

基本上,我有一个类 A,它带有方法 b() 和 c()。 A.b() 返回 void,A.c() 返回一个值。

如果真正的 A.b() 被调用,被测类抛出异常,所以我需要它什么都不做。但是,如果我使用:

    PowerMockito.spy(A.class);
    PowerMockito.doNothing().when(A.class);

然后我不能模拟 A.c() 来返回我需要的值。这是因为行

PowerMockito.when(A.c()).thenReturn(value);

抛出异常:Only void methods can doNothing()

有什么方法可以让 A.b() 什么都不做并“覆盖” A.c() 以返回正确的值?

【问题讨论】:

    标签: java testing


    【解决方案1】:

    我找到了解决问题的解决方法:

    要模拟 A.c(),请使用:

    PowerMockito.mockStatic(A.class);
    PowerMockito.when(A.c()).thenReturn(value);
    

    然后,要对A.b() 不执行任何操作,请添加以下行:

    PowerMockito.suppress(PowerMockito.method(A.class, "b"));
    

    我觉得很脏。

    【讨论】:

    • PowerMockito.doNothing().when(A.class, "b")); 也不起作用吗?
    【解决方案2】:

    我认为您在when() 之后缺少方法调用。

    从 PowerMockito API 开始尝试PowerMockito.doNothing().when(A.class); A.b();

    【讨论】:

    • PowerMockito.doNothing().when(A.class) 的返回类型为 void
    猜你喜欢
    • 2014-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-05
    • 1970-01-01
    • 1970-01-01
    • 2010-09-09
    • 1970-01-01
    相关资源
    最近更新 更多