一、可通过反射获取一个类的父类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