Android 单元测试问题总结(Robolectric+JUnit)

代码单元测试问题总结:

1、测试类中引用第三方jar包类报错

问题原因:
测试的库中没有包含第三方jar包。

解决办法:
在app下gradle中加入第三方jar包配置: testImplementation files(‘libs/third.jar’)

2、自定义Shadow类不生效,还是提示找不到被Shadow类

问题原因:
检查下是不是使用了PowerMock,自测使用PowerMock后Shadow不生效

解决办法:
去掉PowerMock改用Mockito试试,或者第三方依赖都换成Shadow,我这也没啥好的方法。

3、测试单例类,有时候单条测试用例可以跑过,但是跑整个类的单元测试的时候不通过

问题原因:
setUp方法中获取单例对象,但是tearDown中没有置空,每次获取的单例对象都是一个,导致之前测试的设置的值还是生效的。

解决办法:
单例类中加一个destroy方法,把单例对象sInstance置空,每条测试用例开始前执行setUp方法,获取一个新的对象,tearDown中执行destroy方法。

4、使用PowerMock时报错:Could not initialize plugin: interface org.mockito.plugins.MockMaker (alternate: null)ClassNotFoundException

问题原因:
(1)第一种原因是Mockito和PowerMock的版本号对应关系不对。对应关系可参照下面博客:

PowerMock,遇到java.lang.ClassNotFoundException: org.mockito.cglib.proxy.MethodInterceptor

(2)没有加前面的@PowerMockIgnore({ “org.mockito.", "org.robolectric.”, “android.*” })

5、使用PowerMock时报空指针,例如,ATest类中调用B中的方法funcD,该方法中有用到上下文报错,Context是空。

解决办法:PowerMockito.doNothing().when(B对象).funcD();

6、测试配置testCoverageEnabled 时,不要在release配置中,影响运行速率,需要配置在debug中。
buildTypes {
        debug{
            testCoverageEnabled true
        }
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值