测试是软件发布的重要环节,单元测试在实际开发中是一种常用的测试方法,java单元测试主要用junit,最新是junit5,本人开发一般用junit4。因为单元测试能够在软件模块组合之前尽快发现问题,所以实际开发中投入产出比很高。实际使用难免会遇到异步操作的接口测试,最常用的情景是别人家的SDK封装了异步处理,需要用测试用例来验证SDK的流程,顺便测试参数的处理情况。由于异步testcase的会在调用后立即返回,异步线程执行完之前test线程已经结束了,无法验证测试最终结果。我们可以通过同步锁方法把异步接口转换为同步处理流程。
一、什么是单元测试?
单元测试是对软件最小实现单元进行的一种测试,例如C语言的函数,C++的类,java的类等。java有一套单元测试框架junit,Android中有AndroidTestCase等等。我们可以用junit对java函数,类,模块接口进行测试。
二、java单元测试教程
对于单元测试的教程网上有好多,这里就不再重复阐述了。
eclipse单元测试
http://tonl.iteye.com/blog/1948869
gradle构建junit单元测试教程
http://www.jianshu.com/p/e4e99b62a203
三、如何处理异步类型的单元测试
1. 能够获取Thread句柄的异步类型
对于有java thread句柄的测试类型,我们使用使用Thread.join函数等待线程执行完毕。
    @Testpublic void testExplicitThread() {System.out.println("testExplicitThread");Thread thread = new Thread() {@Overridepublic void run() {System.out.println("thread start.");try {for (int i = 0; i < 5; i++) {System.out.println("progress: " + i);sleep(1000);}} catch (InterruptedException e) {e.printStackTrace();} finally {System.out.println("thread finish.");}}};thread.start();try {thread.join(); // 等待线程执行完毕} catch (InterruptedException e) {e.printStackTrace();}System.out.println("testExplicitThread exit");}

测试用例输出:

testExplicitThread
thread start.
progress: 0
progress: 1
progress: 2
progress: 3
progress: 4
thread finish.
testExplicitThread exit
2. 没有thread句柄的异步单元测试
因为没有thread句柄,所以无法使用join函数。只能手动操作同步锁对异步接口进行同步
Object.wait 当前线程进入等待状态,直到其他线程调用notify或者notifyAll函数唤醒。
具体实现如下:
    /*** 回调接口*/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; // 加解锁条件@Testpublic 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();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
处理方法就是在测试线程执行异步接口后进入wait,等待回调退出接口(onFinish)唤醒test线程。

java单元测试之如何实现异步接口的测试案例相关推荐

  1. java单元测试异步不进去方法_java单元测试之如何实现异步接口的测试案例

    测试是软件发布的重要环节,单元测试在实际开发中是一种常用的测试方法,java单元测试主要用junit,最新是junit5,本人开发一般用junit4.因为单元测试能够在软件模块组合之前尽快发现问题,所 ...

  2. Java单元测试之JUnit4详解

    2019独角兽企业重金招聘Python工程师标准>>> Java单元测试之JUnit4详解 与JUnit3不同,JUnit4通过注解的方式来识别测试方法.目前支持的主要注解有: @B ...

  3. Java基础学习总结(24)——Java单元测试之JUnit4详解

    Java单元测试之JUnit4详解 与JUnit3不同,JUnit4通过注解的方式来识别测试方法.目前支持的主要注解有: @BeforeClass 全局只会执行一次,而且是第一个运行 @Before  ...

  4. Java单元测试之模拟利器-使用PowerMock进行Mock测试

    首页 国产Linux Linux命令 openSUSE ArchLinux Slackware FreeBSD Ubuntu CentOS Fedora Debian PHP教程 在线教程 登录 注册 ...

  5. java单元测试之mock篇

    java单元测试之mock篇 一.什么是mock? 二.为什么要进行mock? 三.IDEA中使用Mock 3.1.引入mock所需依赖 3.1.IDEA单元测试必备快捷键 3.2.Mock测试相关注 ...

  6. Java单元测试之Mock框架

    一.引言 二.为什么要用Mock 三.Mock使用场景 四.Mock定义 五.Mock框架 五.Mockito 5.1 Mockito基本使用 5.2 MockMVC测试 5.2.1 初始化MockM ...

  7. java单元测试之Mock测试编写

    mock框架官方文档地址:https://javadoc.io/static/org.mockito/mockito-core/3.2.0/org/mockito/Mockito.html#verif ...

  8. java使用阿里云oss上传文件测试案例+上传策略包装类

    产品文档地址: https://help.aliyun.com/product/31815.html 产品购买地址: https://www.aliyun.com/search?scene=all&a ...

  9. java当中怎么测试异步接口【杭州多测师_王sir】【杭州多测师】

    测试是软件发布的重要环节,单元测试在实际开发中是一种常用的测试方法,java单元测试主要用junit,最新是junit5,本人开发一般用junit4.因为单元测试能够在软件模块组合之前尽快发现问题,所 ...

  10. 单元测试之道一:NUnit基础

    一.单元测试的概述 1.单元测试是开发编写的一小段代码,用于检测被测代码的一个很小的,很明确的功能是否正确.通常而言,一个单元测试是用于判断某个特定条件(或者场景)下某个特定函数的行为.执行单元测试是 ...

最新文章

  1. AngularJS与Django-模板标签冲突
  2. TDD Tip:方法内部New出来的对象如何Mock
  3. unity3d 随机生成地形之随机山脉
  4. SpringBoot异步任务, 以及带返回值的异步任务(@Async 不起作用的原因)
  5. oracle删除数据用户,oracle删除用户及表空间,导入用户和数据
  6. 酒水饮料行业进销存软件前十排行榜,强推第一款
  7. 技本功|数据安全之IDC数据容灾设计实现
  8. dispatch_group_async
  9. 用C语言循环码,xinxilunyubianma
  10. 微信朋友圈python广告评论_利用Python让你的微信朋友圈与众不同,更加高大上
  11. postman测试Excel文件导入导出功能
  12. springboot海纳部门人事管理系统毕业设计源码
  13. multimodal prompting
  14. razer鼠标测试软件,驱动软实力对比测试_Razer 炼狱蝰蛇2013鼠标_键鼠评测-中关村在线...
  15. 关于hands on machine learning中datasets数据无法下载的问题
  16. selenium定位a标签python_selenium自动化,已经定位到A标签的位置,但是点击A标签时不执行后台的js方法。...
  17. python代码中疯狂print影响python性能吗?print是io吗?结论是做代码性能测试千万不要疯狂print,否则结果严重不准确,性能大幅下降。...
  18. mt2503 [PHB]如何在IDLE界面拨打SDN号码时能显示其名称?
  19. 关于学生使用 学生证 申请免费的 Jet Brains 软件使用许可 没有教育邮箱/学生邮箱 clion pycharm intellij idea goland phpstorm rider
  20. Microsoft发布了Azure Bot Service和LUIS的GA版

热门文章

  1. java asyncexec,Display类的syncExec()和asyncExec()之间的区别
  2. WebShell脚本检测机器学习一
  3. 多年前,初始架构:php+mysql下,对网站架构方面的一些认识
  4. ui-router 之 $state.go
  5. Java多线程:线程同步与关键字synchronized
  6. 事务、事务的隔离级别、一致性
  7. Windows 安装配置Java开发环境《jdk8》
  8. 数组与数组冒泡排序,选择排序
  9. 2018-2019-1 20189218《Linux内核原理与分析》第二周作业
  10. java第三方类库实现图片等比缩放