当 class 的静态方法 return 与 class 的对象相同时,PowerMock 抛出 initialzationError

PowerMock throw initialzationError when a class's static method return same a same class's object

一个initializationError被抛出。我正在使用 powermock 1.6.4 和 javassist-3.20.0。看来我不能在同一个class(同时)上模拟和模拟静态。

interface B
{
  public static B getA()
  {
    return new B()
      {
      };
  }
}

a test code is:
@PrepareForTest({B.class})
@Test
  public void testB()
  {
    B a = mock( B.class );
    mockStatic( B.class );
    when( B.getA() ).thenReturn( a );

  }

您必须准备 B 模拟(例如,使用 PowerMockRunner)否则测试将在这一行抛出 ClassNotPreparedException

mockStatic( B.class );

此测试将通过(尽管因为它没有断言,所以说此测试不会抛出异常可能更准确;):

@RunWith(PowerMockRunner.class)
@PrepareForTest({B.class})
public class BTest {

    @Test
    public void testB() {
        B a = Mockito.mock(B.class);
        PowerMockito.mockStatic(B.class);
        Mockito.when(B.getA()).thenReturn(a);
    }
}

我已经使用以下方式验证了这一点:

  • Mockito v1.10.19 和 PowerMock v1.6.4
  • Mockito v2.7.19 和 PowerMock v1.7.0