IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> Android 单元测试中遇到的一些问题汇总 -> 正文阅读

[开发测试]Android 单元测试中遇到的一些问题汇总

  1. verifyNoMoreInteractions(listener);//验证没有更多交互
  2. @Mock private PlaybackParametersListener listener; initMocks(this);在使用 Androidunit4 时同样可以使用 Mockito;
  3. assertThat(mediaClock.syncAndGetPositionUs( false)).isEqualTo(TEST_POSITION_US);
  4. @Config(sdk = 29) // Allows using MediaFormat.getKeys() to make assertions over the expected keys.//写在类名上方
  5. 单元测试:上下文:context = InstrumentationRegistry.getTargetContext();
  6. Context applicationContext = ApplicationProvider.getApplicationContext()
  7. 反射调用私有静态方法
        //调用私有静态的
        Method method = Camera1Enumerator.class.getDeclaredMethod("getCameraInfo", Integer.class);
        method.setAccessible(true);
        android.hardware.Camera.CameraInfo cameraInfo = (android.hardware.Camera.CameraInfo) method.invoke(mCamera1Enumerator, 0);
        Assert.assertNotNull( cameraInfo);
  1. 屏蔽静态代码块加载:@SuppressStaticInitializationFor(“com.rz.paas.internal.RZRtcEngineImpl”)//阻止静态代码块运行

  2. 反射回去静态属性‘
    private Class reflectClass, reflectRecord; //用以获取私有属性
    private Field mbluetoothManager, maudioManager;
    reflectClass = mDBAudioManager.getClass();
    reflectRecord = mDBAudioRecord.getClass();
    mbluetoothManager = reflectClass.getDeclaredField(“bluetoothManager”);//私有属性
    mbluetoothManager.setAccessible(true);
    //获取其值
    mbluetoothManager.get(mDBAudioManager)
    //设置其值
    mbluetoothManager.set(mDBAudioManager,value)

  3. 描述

/**
 * 2021-08-06 Unit tests for {@link EncodedImage}.
 */
  1. 测试异常 @Test(expected = IllegalStateException.class)
  2. 抽象类的反射
    私有属性:
私有属性的变量 = 抽象类 .class.getDeclaredField("私有属性");
私有属性的变量.setAccessible(true);

方法

AbstractClass.class.getMethod("getName").invoke(子类对象); 
  1. cameraName
cameraName = "Camera 0, Facing back, Orientation 90";
cameraName_Back = "Camera 1, Facing front, Orientation 270";
  1. 单元测试测试线程
Thread thread = new Thread(){
    @Override
    public void run() {
        super.run();
        for (int i = 0; i < 5; i++) {
            System.out.println(i);
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
};

@Test
public void createTextureBufferWithModifiedTransformMatrix() throws Exception{
    thread.start();
    thread.join();
    System.out.println("线程执行结束");
}

thread.join(); 等待线程执行结束!

  1. 测试回调
/**
 * 回调接口
 */
interface Callback {
    void onStart();

    void onProgress(int progress);

    void onFinish();
}

/**
 * 异步方法
 */
static class AsyncDemo {
    private int len = 0;
    private Callback callback = null;

    public AsyncDemo(int len, Callback cb) {
        this.len = len;
        this.callback = cb;
    }

    public void doJob() {
        new Thread() {
            @Override
            public void run() {
                if (null != callback) {
                    callback.onStart();
                }
                try {
                    for (int i = 0; i < len; i++) {
                        if (null != callback) {
                            callback.onProgress(i);
                        }
                        sleep(1000);
                    }
                } catch (InterruptedException e) {
                    e.printStackTrace();
                } finally {
                    if (null != callback) {
                        callback.onFinish();
                    }
                }
            }
        }.start();
    }
}

private Object mLock = new Object(); //同步锁
private int mCount = 0; //加解锁条件

@Test
public void testBlindCallback() {
    System.out.println("testBlindCallback");
    Callback cb = new Callback() {
        public void onStart() {
            System.out.println("onStart");
        }

        public void onProgress(int progress) {
            System.out.println("onProgress: " + progress);
        }

       public void onFinish() {
           System.out.println("onFinish");
           synchronized (mLock) {
                mCount = 0;
                mLock.notifyAll();//回调执行完毕,唤醒主线程
            }
        }
    };

    System.out.println("before AsyncDemo doJob");
    AsyncDemo demo = new AsyncDemo(5, cb);
    demo.doJob();
    //作用类似于 thread.join(); 等待线程执行结束
    synchronized (mLock) {
       mCount = 1; //设置锁条件
       while (mCount > 0) {
            try {
                mLock.wait();//等待唤醒
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
    System.out.println("after AsyncDemo doJob");
}

输出结果:
testBlindCallback
before AsyncDemo doJob
onStart
onProgress: 0
onProgress: 1
onProgress: 2
onProgress: 3
onProgress: 4
onFinish
after AsyncDemo doJob
  1. 初始化无参构造器
    mCamera1Session = Camera1Session.class .newInstance();
  2. Mac 运行 .sh 文件, sh ./build_libs.sh
  3. 一个Volatile;
@Test
public void test() throws Exception {
    AoFlag aoFlag = new AoFlag();
    aoFlag.start();
    for (int i = 0; i < 300; i++) {
        if (aoFlag.isFlag())
            Log.e("TAG\t\t\t", "test: ~~~ "+i);
    }
    aoFlag.join();
}
class AoFlag extends Thread {
    boolean flag = false;
    public boolean isFlag() {
        return flag;
    }
    @Override
    public void run() {
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        flag = true;
        Log.e("TAG\t\t\t", "run: " + flag);
    }
}
//输出只有:TAG			: run: true
  1. 乐观锁、悲观锁;
  2. Synchronized
  3. 理解协程、LiveData 和 Flow
  4. 没有LiveData如何实现轻松MVVM

声明

上述内容从网上搜集整理,如有侵权请私信我速删。

  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2022-04-22 19:07:17  更:2022-04-22 19:07:42 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 12:09:47-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码