PowerMockito测试遗留代码

时间:2013-02-11 16:51:48

标签: java testing

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

基本上,我有一个类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()以返回正确的值?

2 个答案:

答案 0 :(得分:1)

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

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

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

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

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

我觉得很脏。

答案 1 :(得分:0)

我认为您在when()之后错过了方法调用。

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