【个人笔记】安卓实机测试 2021-04-09

一、安卓实机APP测试,用例中不能模拟静态类,即 Mockito.mockStatic,会报错:

org.mockito.exceptions.base.MockitoException:
The used MockMaker AndroidByteBuddyMockMaker does not support the creation of static mocks

Mockito's inline mock maker supports static mocks based on the Instrumentation API.
You can simply enable this mock mode, by placing the 'mockito-inline' artifact where you are currently using 'mockito-core'.
Note that Mockito's inline mock maker is not supported on Android.

二、仅使用Mockito的情况下无法mock final类:

RepositoryProxy.class是final类

1.使用Whitebox: RepositoryProxy mRepositoryProxy = Mockito.mock(Whitebox.newInstance(RepositoryProxy.class).getClass());
一样报错:

org.mockito.exceptions.base.MockitoException:
Cannot mock/spy class com.desaysv.remote.RepositoryProxy
Mockito cannot mock/spy because :
- final class

三、在通过getInstance获取到实例化时,无法用Whitebox.setInternalState把其本身实例化替换。

源码:
 public static HudInfoManager getInstance() {
        if (mHudInfoManager == null) {
            synchronized (HudInfoManager.class) {
                if (mHudInfoManager == null) {
                    mHudInfoManager = new HudInfoManager();
                }
            }
        }
        return mHudInfoManager;
    }
测试用例        
HudInfoManager mHudInfoManager = Mockito.mock(HudInfoManager.class);
Whitebox.setInternalState(HudInfoManager.getInstance(),"mHudInfoManager",mHudInfoManager);

会报错提示找不到“mHudInfoManager

四、实机测试中报错:

java.lang.IllegalStateException: Could not initialize plugin: interface org.mockito.plugins.MockMaker (alternate: null)
at org.mockito.internal.configuration.plugins.PluginLoader$1.invoke(PluginLoader.java:84)
at java.lang.reflect.Proxy.invoke(Proxy.java:913)
at $Proxy4.isTypeMockable(Unknown Source)
at org.mockito.internal.util.MockUtil.typeMockabilityOf(MockUtil.java:33)...

解决:在该app的gradle中将“net.bytebuddy:byte-buddy”的依赖改为适配“org.mockito:mockito-core”的版本(可以Maven仓库中对照)
答案参考:https://blog.csdn.net/sinat_33010325/article/details/89431296

五、Mockito.spy(WhiteBox.NewInstance(xxx.class))出来的实例无法调用getclass().getfeild(“xx”)来反射出xx对象: 会报错提示找不到这个“xx”
解决:用Whitebox:在这里插入图片描述

六、提示apk签名不同而安装失败问题:

//如下报错:
Installation did not succeed.
The application could not be installed: INSTALL_FAILED_UPDATE_INCOMPATIBLE

List of apks:
[0] 'D:\TestApp\myapplication\myapplication\build\outputs\apk\debug\myapplication-debug.apk'
The device already has an application with the same package but a different signature.

解决方法:
1.首先:adb shell pm list packages -s 找到要删除的包名
2.获取包名的地址:adb shell pm path com.xx.xx
3.挂载系统读写权限:adb remount
4.删除包:adb shell rm /system/app/OldDriver/OldDriver.apk
5.最后adb reboot重启就OK

参考来源:https://blog.csdn.net/heng615975867/article/details/87362004
七、当通过aar加载其它项目的类时,如若找不到某方法,可能是AS没有更新class.jar,点击AS中的“Invalidata Caches/Restart” ,再rebuild。
八、使用Mockito.when().thenReturn()的时候报错:

Voids are usually stubbed with Throwables:
doThrow(exception).when(mock).someVoidMethod();
If you need to set the void method to do nothing you can use:
doNothing().when(mock).someVoidMethod();
For more information, check out the javadocs for Mockito.doNothing().
***
If you're unsure why you're getting above error read on.
Due to the nature of the syntax above problem might occur because:
1. The method you are trying to stub is *overloaded*. Make sure you are calling the right overloaded version.
2. Somewhere in your test you are stubbing *final methods*. Sorry, Mockito does not verify/stub final methods.
3. A spy is stubbed using when(spy.foo()).then() syntax. It is safer to stub spies -
- with doReturn|Throw() family of methods. More in javadocs for Mockito.spy() method.
4. Mocking methods declared on non-public parent classes is not supported.

解决:当其中的实例是spy出来时,必须用Mockito.doReturn().when()

九、找不到 “ android.databinding.ObservableField”
在这里插入图片描述
方法:导入android.databinding.ObservableField: libarary:

implementation group: 'com.android.databinding', name: 'library', version: '3.5.1'

十、在使用Mockito.spy(xxx.class)时,运行时报错:

java.lang.IllegalStateException: Could not initialize plugin: interface org.mockito.plugins.MockMaker (alternate: null)

方法:1)将net.bytebuddy:byte-buddy切换成org.mockito:mockito-core匹配的版本(maven里查)
2)若还是不行,就将androidTest的依赖全部删去,重新加入Esspresso的测试依赖
参考:https://www.freesion.com/article/8800923766/

十一、安卓实机测试:安装apk时出现xxx due to: 'Invalid File: xxx' 错误:

Installation did not succeed.
The application could not be installed.

List of apks:
[0] 'D:\xxx\ultiDisplay-debug.apk'
Installation failed due to: 'Invalid File: D:\xxx\ultiDisplay-debug.apk'

方法:检查build.gradle配置文件中是否添加了修改所生成apk名的字段,如下面此处就是:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值