【笔记4-26】安卓junit单元/集成测试(7-1更新)


一、可通过反射获取一个类的父类class :


方法:”使用Class类中的getSuperClass()方法能够得到一个类的父类“
参考:https://www.cnblogs.com/kelelipeng/p/12010434.html


二、java 父类对象不能直接转化为子类对象:


参考:https://blog.csdn.net/u011630575/article/details/80072241


三、当一个xx类没有默认public的构造方法时,测试用例无法创建内部类来继承此xx类:


报错:

There is no default constructor available in 'com.xxx.remote.RepositoryProxy'

四、当一个xx类是final类且没有默认public的构造方法时,仅使用Mockito的情况下完全没办法创建它的模拟对象:

(原因请参考标题一至三 ↑)
在这里插入图片描述

五、若无法进行虚拟机单元测试时,原因是因为使用了无法模拟的Log.class:

方法:可以将本来import的Log.class删去,重新import为import android.util.Log;

六、有些打桩时出现的原生类报错问题,无法创建实例或者mock:

报错:

java.lang.NoClassDefFoundError: dalvik/system/VMRuntime

	at com.android.internal.util.ArrayUtils.newUnpaddedIntArray(ArrayUtils.java:54)
	at android.util.SparseIntArray.<init>(SparseIntArray.java:71)
	at android.util.SparseIntArray.<init>(SparseIntArray.java:56)
	at android.media.AudioAttributes.<clinit>(AudioAttributes.java:214)
	at sun.reflect.GeneratedSerializationConstructorAccessor24.newInstance(Unknown Source)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:423)

或者:

java.lang.NoClassDefFoundError: libcore/util/EmptyArray

	at android.util.ArrayMap.<init>(ArrayMap.java:284)
	at android.util.ArrayMap.<init>(ArrayMap.java:272)
	at android.util.ArrayMap.<clinit>(ArrayMap.java:83)
	at java.lang.Class.forName0(Native Method)

这三种方法创建对象都不行:

audioAttributes = new AudioAttributes.Builder().build(); //直接正常实例化
audioAttributes = PowerMockito.mock(AudioAttributes.class);
audioAttributes = Whitebox.newInstance(AudioAttributes.class);

七、无法使用suppress跳过父类构造器(super):

PowerMockito.suppress(PowerMockito.method(RelativeLayout.class,"RelativeLayout",Context.class));

会报错:

org.powermock.reflect.exceptions.MethodNotFoundException: No method found with name 'RelativeLayout' with parameter types: [ android.content.Context ] in class android.widget.RelativeLayout

八、使用Powermockito.verifyPrivate()可以验证类内部私有方法的调用

用法:
PowerMockito.verifyPrivate(mock对象).invoke("私有方法名",参数);

参考:
https://stackoverflow.com/questions/9469275/powermock-how-to-do-easymocks-expectprivate-for-mockito
另外,easymock用法参考,但需要排除api冲突:
https://github.com/powermock/powermock/wiki/MockPrivate

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值