打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
配置同时使用PowerMock和Robolectric对Android进行单元测试

标签:

Robolectric官网上给了一个配置教程,但是我使用它的方法进行配置,发现使用Mockito.spy函数的时候会出现Exception。
后来在PowerMock官网上找到了另外一个教程,里面说使用PowerMockRule是不靠谱的,要使用PowerMock 1.6.0引入的新的@PowerMockRunnerDelegate annotation来进行配置
具体配置文件如下:
module里面的build.gradle添加依赖: 
 1 dependencies { 2     ...... 3  4     testCompile "org.robolectric:robolectric:3.0" 5     testCompile ‘org.mockito:mockito-core:1.10.19‘ 6     testCompile ‘junit:junit:4.12‘ 7     testCompile "org.powermock:powermock-module-junit4:1.6.4" 8     testCompile "org.powermock:powermock-module-junit4-rule:1.6.4" 9     testCompile "org.powermock:powermock-api-mockito:1.6.4"10     testCompile "org.powermock:powermock-classloading-xstream:1.6.4"11 }
对下面的 RobolectricTest 基类进行继承,就可以正常使用PowerMock和Robolectric进行测试了
import org.junit.runner.RunWith;import org.powermock.core.classloader.annotations.PowerMockIgnore;import org.powermock.modules.junit4.PowerMockRunner;import org.powermock.modules.junit4.PowerMockRunnerDelegate;import org.robolectric.RobolectricGradleTestRunner;import org.robolectric.annotation.Config;/** * Base class extended by every Robolectric test in this project. * <p/> * You can use Powermock together with Robolectric. */@RunWith(PowerMockRunner.class)@PowerMockRunnerDelegate(RobolectricGradleTestRunner.class)@Config(constants = BuildConfig.class,        sdk = 21)@PowerMockIgnore({"org.mockito.*", "org.robolectric.*", "android.*"})public abstract class RobolectricTest {}
记住要import Powermock版本的mockito api,不然会出现稀奇古怪的bug。
比如
import static org.powermock.api.mockito.PowerMockito.mock;import static org.powermock.api.mockito.PowerMockito.spy;import static org.powermock.api.mockito.PowerMockito.when;
有时候Robolectric会提示你不能找到 Manifest.xml ,这时候一般clean project就可以了。
Robolectric 3.0 暂时不支持加载jniLibs,如果你的代码用到了jniLibs,就只能使用 Android Instrumentation Tests了,如果你像我一样 extends android.app.Application 来创建自己的Application类,并在该Application类中写了了需要调用jniLibs的代码,可以使用以下的方法在unit test中跳过这些代码。
@Overridepublic void onCreate() {    super.onCreate();    if (isJUnitTest()) {        // 省略掉包含jniLibs的library的初始化    } else {        // 进行正常的初始化    }}public static boolean isJUnitTest() {    StackTraceElement[] stackTrace = new Throwable().getStackTrace();    for (StackTraceElement element : stackTrace) {        if (element.getClassName().startsWith("org.junit.")) {            return true;        }    }    return false;}

 

配置同时使用PowerMock和Robolectric对Android进行单元测试

标签:

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
Powermock2.0.0 详细 总结
微服务实战之Mock
Junit Hamcrest Mockito单元测试
有啥不同?来看看Spring Boot 基于 JUnit 5 实现单元测试
8个超实用的Java测试工具和框架
Robolectric使用教程
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服