【问题标题】:PowerMock throw initialzationError when a class's static method return same a same class's object当类的静态方法返回相同的同一个类的对象时,PowerMock 抛出 initialzationError
【发布时间】:2017-11-21 21:00:00
【问题描述】:

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

  }

【问题讨论】:

  • 错误在哪里抛出?请提供您迄今为止为解决此问题所做的尝试。
  • 没有抛出任何错误,也没有失败跟踪。如果我使用 BFactory 和如下代码: B a = mock(B.class);模拟静态(BFactory.class);当(BFactory.getA()).thenRturn(a);那么它工作正常,但我不想仅仅为了这个模拟测试目的而添加一个工厂。

标签: java mockito powermock mockstatic


【解决方案1】:

您必须准备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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 2012-08-11
    • 2012-06-08
    • 1970-01-01
    • 1970-01-01
    • 2013-08-06
    • 1970-01-01
    相关资源
    最近更新 更多