【问题标题】:Power Mockito returns error org.powermock.api.mockito.ClassNotPreparedExceptionPower Mockito 返回错误 org.powermock.api.mockito.ClassNotPreparedException
【发布时间】:2017-01-29 04:28:31
【问题描述】:

我有一个图像加载器类,我想在其中测试一些静态方法。由于 Mockito 不支持静态方法,我切换到 Power Mockito。但是我正在测试的静态方法有一个方法调用

 Base64.encodeToString(byteArray, Base64.DEFAULT);

为了模拟这个,我使用如下 mockStatic 方法。

 PowerMockito.mockStatic(Base64.class);

但 Android Studio 正在返回我仍然返回如下错误。

org.powermock.api.mockito.ClassNotPreparedException:类 android.util.Base64 未准备好进行测试。要准备这堂课,请添加 '@PrepareForTest' 注释的类。

下面是我的完整代码。

@RunWith(PowerMockRunner.class)
@PrepareForTest({Base64.class})
public class ImageLoaderTest  {
@Test
   public void testConvertBitmap(){
    byte[] array = new byte[20];
    PowerMockito.mockStatic(Base64.class);
    PowerMockito.when(Base64.encodeToString(array, Base64.DEFAULT)).thenReturn("asdfghjkl");
    Bitmap mockedBitmap= PowerMockito.mock(Bitmap.class);
    String output = ImageLoaderUtils.convertBitmapToBase64(mockedBitmap);
    assert (!output.isEmpty());
}

}

Gradle 依赖项

testCompile 'junit:junit:4.12'
testCompile 'org.powermock:powermock:1.6.5'
testCompile 'org.powermock:powermock-module-junit4:1.6.5'
testCompile 'org.powermock:powermock-api-mockito:1.6.5'

【问题讨论】:

    标签: android mockito powermock android-testing powermockito


    【解决方案1】:

    虽然我不确定,但 Android Studio可能使用系统类加载器来处理 Android 类,这需要你 use the same workarounds as for system classes

    在幕后,Powermock 使用一个特殊的类加载器来重写您准备的类,这样 Mockito 或 EasyMock 可以存根/验证私有/静态/最终方法,而无需特殊的类加载 Mockito 和 EasyMock 通常依赖代理子类限制您使用可见的可覆盖实例方法。但是,无法覆盖系统类加载器加载的类,因为官方实现已经加载,无法替换或扩充。 Powermock 让您准备/重写与系统类交互的类,因此可以拦截调用并将其重定向到您选择的模拟框架。

    此外,虽然这似乎只是一个术语问题,但您说您想“测试一些静态方法”并且“Mockito 不支持静态方法”。您可以在测试静态方法时使用 Mockito,但不能像使用 Base64.encodeToString 那样使用 Mockito 来验证或存根(替换实现)静态方法;这就是您需要 PowerMock 的地方,就像您在这里所做的那样。小心不要模拟被测系统,否则你可能会在没有实际测试任何真实系统的情况下测试你的模拟行为。

    【讨论】:

      猜你喜欢
      • 2017-01-17
      • 1970-01-01
      • 2015-09-05
      • 1970-01-01
      • 1970-01-01
      • 2020-11-21
      • 2013-08-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多