【发布时间】:2017-01-17 06:25:45
【问题描述】:
我有一个图像加载器类,我需要在其中测试一些静态方法。由于 Mockito 不支持静态方法,我切换到 Power Mockito。但是我正在测试的静态方法有一个方法调用
Base64.encodeToString(byteArray, Base64.DEFAULT);
为了模拟这个,我使用如下的 mockStatic 方法和@PrepareForTest 注释。
PowerMockito.mockStatic(Base64.class);
但 Android Studio 正在返回我仍然返回如下错误。
org.powermock.api.mockito.ClassNotPreparedException:类 android.util.Base64 未准备好进行测试。要准备这堂课,请添加 '@PrepareForTest' 注释的类。
下面是我的完整代码。
要测试的代码:
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.util.Base64;
import android.widget.ImageView;
public static String convertBitmapToBase64(Bitmap imageBitmap, boolean withCompression) {
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
imageBitmap.compress(Bitmap.CompressFormat.PNG, 120, byteArrayOutputStream);
byte[] byteArray = byteArrayOutputStream.toByteArray();
return Base64.encodeToString(byteArray, Base64.DEFAULT);
}
测试类代码
import android.graphics.Bitmap;
import android.util.Base64;
import org.junit.Before;
import org.junit.runner.RunWith;
import org.mockito.MockitoAnnotations;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
import org.testng.annotations.Test;
@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'
【问题讨论】:
-
向我们展示您的导入
-
@JEY Imports 添加。测试类和要测试的类都使用相同的导入。
-
你使用的是 junit 还是 testng ?因为测试注解是从 TestNG 导入的。
-
@JEY 我将导入从 TestNG 更改为 Junit,现在我收到如下错误。 " ================================================= 默认套件运行的测试总数:0,失败:0,跳过:0 ===================================== ========== 进程以退出代码 0 空测试套件完成。“我不确定要使用哪个测试框架。
-
看看developer.android.com/studio/test/index.html,了解如何创建和运行单元测试。
标签: android unit-testing junit mockito powermock