PowerMock,如何使静态方法多次返回值?

时间:2014-05-27 10:57:17

标签: java powermock

这可能是一个简单的问题,但我找不到合理搜索的答案。 我试图让一个静态方法在多个测试中多次返回一个值。使用PowerMock的模拟静态方法无法实现这一点。简而言之,我有一个像这样的JUnit测试@BeforeClass

@RunWith(PowerMockRunner.class)
@PrepareForTest(StaticStuff.class)
public class MyTest extends TestCase {
  @BeforeClass
  public static void init() {
    // Mock some stuff
    PowerMockito.mockStatic(StaticStuff.class);
    Mockito.when(StaticStuff.get()).thenReturn("something");
  }
}

现在,这适用于访问静态方法的第一个测试,但其余的将接收' null' (更新:或"真实"方法将返回的任何其他值)。我可以通过简单地将@BeforeClass更改为@Before来解决问题,从而为每次测试重新创建静态模拟。但是afaik,这不是正确的方法。对于这种特殊情况,这样做,但我相信应该有一种方法来提供可以被称为方法的信息"任何时候"。

实际上我从文档中了解到应该返回相同的值"默认情况下无限次#34; (但它没有。从Mockito文档:'一旦存根,模拟方法将始终返回存根值,无论它被调用多少次。')。我也希望说出通话量应该是这么简单的事情(但它不是):

Mockito.when(StaticStuff.get()).thenReturn("something").times(10);

也许我只是错过了什么?

1 个答案:

答案 0 :(得分:1)

测试应该彼此独立。如果使用JUnit,则根本不确定测试的顺序(参见https://github.com/junit-team/junit/wiki/Test-execution-order)。我认为在@BeforeClass中创建模拟实际上是一种不好的做法,因为可以导致测试相互依赖。因此,我建议使用@Before方法初始化所有模拟,并使用@BeforeClass ,如果您准备了一些非常常见的测试(如连接池或类似的东西)