0

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

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

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

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

然后我不能模拟 Ac() 来返回我需要的值。这是因为线

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

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

有没有办法让 Ab() 什么都不做并“覆盖” Ac() 以返回正确的值?

4

2 回答 2

1

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

要模拟 Ac(),请使用:

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

然后,不做任何事情A.b(),添加以下行:

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

我觉得好脏。

于 2013-02-11T17:17:12.503 回答
0

我认为你错过了你的方法调用之后when()

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

于 2013-02-11T16:58:22.657 回答