Android 单元测试中遇到的一些问题汇总
- verifyNoMoreInteractions(listener);//验证没有更多交互
- @Mock private PlaybackParametersListener listener; initMocks(this);在使用 Androidunit4 时同样可以使用 Mockito;
- assertThat(mediaClock.syncAndGetPositionUs( false)).isEqualTo(TEST_POSITION_US);
- @Config(sdk = 29) // Allows using MediaFormat.getKeys() to make assertions over the expected keys.//写在类名上方
- 单元测试:上下文:context = InstrumentationRegistry.getTargetContext();
- Context applicationContext = ApplicationProvider.getApplicationContext()
- 反射调用私有静态方法
//调用私有静态的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);
屏蔽静态代码块加载:@SuppressStaticInitializationFor(“com.rz.paas.internal.RZRtcEngineImpl”)//阻止静态代码块运行
反射回去静态属性‘
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)描述
/*** 2021-08-06 Unit tests for {@link EncodedImage}.*/
- 测试异常
@Test(expected = IllegalStateException.class)
- 抽象类的反射
私有属性:
私有属性的变量 = 抽象类 .class.getDeclaredField("私有属性");
私有属性的变量.setAccessible(true);
方法
AbstractClass.class.getMethod("getName").invoke(子类对象);
- cameraName
cameraName = "Camera 0, Facing back, Orientation 90";
cameraName_Back = "Camera 1, Facing front, Orientation 270";
- 单元测试测试线程
Thread thread = new Thread(){@Overridepublic 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(); 等待线程执行结束!
- 测试回调
/*** 回调接口*/
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() {@Overridepublic 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
- 初始化无参构造器
mCamera1Session = Camera1Session.class .newInstance(); - Mac 运行 .sh 文件,
sh ./build_libs.sh
- 一个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;}@Overridepublic void run() {try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}flag = true;Log.e("TAG\t\t\t", "run: " + flag);}
}
//输出只有:TAG : run: true
- 乐观锁、悲观锁;
- Synchronized
- 理解协程、LiveData 和 Flow
- 没有LiveData如何实现轻松MVVM
声明
上述内容从网上搜集整理,如有侵权请私信我速删。
Android 单元测试中遇到的一些问题汇总相关推荐
- Android开发中遇到的错误处理汇总(持续更新)
------------------------------------- read the fucking source code-------------------------------- A ...
- Android单元测试读写文件,如何在Android单元测试中读取仅测试文件
对于我的Android应用程序,我正在编写需要读取一些文件的单元测试. 由于这些是仅测试文件,因此我不希望它们出现在res文件夹中,因为我不希望它们最终出现在最终的.apk文件中. 我想做与此问题类似 ...
- Android单元测试中AndroidJUnit4获取context
在AndroidJUnit4直接通过getContext()获取到的context并不是当前APP的context,而是instrumentation的context,应使用以下方法来获取contex ...
- Android单元测试全解
自动化测试麻烦吗?说实在,麻烦!有一定的学习成本.但是,自动化测试有以下优点: 节省时间:可以指定测试某一个activity,不需要一个个自己点 单元测试:既然Java可以进行单元测试,Andro ...
- Android单元测试研究与实践
处于高速迭代开发中的Android项目往往需要除黑盒测试外更加可靠的质量保障,这正是单元测试的用武之地.单元测试周期性对项目进行函数级别的测试,在良好的覆盖率下,能够持续维护代码逻辑,从而支持项目从容 ...
- 关于Android单元测试
[转载自美团点评技术团队的一篇文章,原文在这里:http://http://tech.meituan.com/Android_unit_test.htmld_unit_test.html.若涉嫌侵犯权 ...
- android studio资产目录,在Android Studio中设置单元测试的自定义资产目录
我们对使用仅需要进行单元测试的资产的Android应用程序执行单元测试是不常见的要求. 使用基于Eclipse的SDK这是简单明了的 – 测试项目是一个单独的项目,其自有资产文件夹.使用Android ...
- 关于Android Studio单元测试中“Method d in android.util.Log not mocked.”问题的解决。
关于Android Studio单元测试中"Method d in android.util.Log not mocked."问题的解决. 点开链接 这就是解决方案.(这主要是由于 ...
- android开发中遇到的问题汇总
android开发中遇到的问题汇总(五),android汇总127.ANDROID仿IOS时间_ANDROID仿IOS弹出提示框 http://dwtedx.com/itshare_297.html1 ...
最新文章
- 免费直播:主流深度框架对比:总有一款适合你~
- git解决代码提交冲突
- 高并发MPP查询引擎Impala初识
- php网站入门鹿泉银山,01PHP编程新手入门第一步
- Linux系统检测工具 三(Free,Top,ps,Vmstat,Sysstat)
- 登录和注销、基于Session的购物车案例、验证码的使用、防止表单重复提交
- [Swift]LeetCode323. 无向图中的连通区域的个数 $ Number of Connected Components in an Undirected Graph...
- B树,B+树,红黑树应用场景AVL树,红黑树,B树,B+树,Trie树
- c语言语句结束的标准,C语言的语句要求以哪种符号结束?
- 2020五一数学建模比赛总结
- 计算机专业保研预推免面试记录
- 普元EOS开发总结——前端框架
- win10家庭版,双击bat文件无法运行_20200120
- ubuntu 18.04安装微信
- dreamweaver html模版,dreamweaver利用预设模板来快速的架构一个简易网站
- 关于Landsat所有知识都在这里
- 服务器宕机是什么意思怎处理解决?
- 黑暗料理-花菜+肉丝+木耳
- 日系插画学习笔记(五):日系角色脸部画法-1头部
- 第11期 DApp 榜单:这是一篇让DD君重伤住院的内容
热门文章
- 阿里、腾讯、蚂蚁金服Java技术面试及经验总结(文末分享答案)
- html主页面设计如何丰富可视化元素,数据可视化设计如何丰富页面?
- java PTA 找到出勤最多的人
- aiohttp mysql 线程池_协程一例:用aiohttp代替requests写异步爬虫
- aiohttp mysql_aiohttp 怎么复用连接池
- 联发科MT6167固件编译和参数配置方法
- 二手手机十分管用的检查方法
- 15春到夏的逐渐绽开
- 分布式 Web UI 自动化系统的设计与实现
- Performance Analysis of Rateless-CodedNon-Orthogonal Multiple Access over Nakagami-m Fading Channel