PowerMock,模拟一个静态方法,然后调用所有其他静态实方法(PowerMock, mock a

2019-07-19 03:04发布

我设置了嘲讽一个类的静态方法。 我不得不这样做在@Before -annotated JUnit的设置方法。

我的目标是设置调用真正的方法, 除了那些方法,我明确地嘲笑类。

基本上:

@Before
public void setupStaticUtil() {
  PowerMockito.mockStatic(StaticUtilClass.class);

  when(StaticUtilClass.someStaticMethod(anyS

特林()))thenReturn(5)。 //模拟出一定的方法...

  // Now have all OTHER methods call the real implmentation???  How do I do this?
}

我遇到的问题是,内StaticUtilClass方法public static int someStaticMethod(String s)不幸抛出一个RuntimeException ,如果使用所提供的null值。

因此,我不能简单地去调用真正的方法,如下列的预设答案的明显途径:

@Before
public void setupStaticUtil() {
  PowerMockito.mockStatic(StaticUtilClass.class, CALLS_REAL_METHODS); // Default to calling real static methods

  // The below call to someStaticMethod() will throw a RuntimeException, as the arg is null!
  // Even though I don't actually want to call the method, I just want to setup a mock result
  when(StaticUtilClass.someStaticMethod(antString())).thenReturn(5); 
}

我需要设置默认的回答来呼吁所有其他静态方法真正的方法后,我从嘲笑我感兴趣的嘲讽方法的结果。

这可能吗?

Answer 1:

你在寻找被称为部分嘲讽

在PowerMock你可以使用mockStaticPartial方法。

在PowerMockito您可以使用存根,这将存根只定义的方法,并留下其他不变:

PowerMockito.stub(PowerMockito.method(StaticUtilClass.class, "someStaticMethod")).toReturn(5);

也不要忘了

@PrepareForTest(StaticUtilClass.class)


文章来源: PowerMock, mock a static method, THEN call real methods on all other statics