0

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

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 );

  }
4

1 回答 1

0

您必须准备B模拟(例如,通过使用PowerMockRunner),否则测试将ClassNotPreparedException在此行抛出 a:

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
于 2017-11-22T08:19:03.023 回答