大咖直播-鸿蒙原生开发与智能提效实战!>>> 了解详情
写点什么

单元测试 VS 异步代码随机测试的随想

  • 2014-08-26
  • 本文字数:907 字

    阅读完需:约 3 分钟

众多“任务 + 异步 / 等待”模式有意思的特性之一是用户能够比较容易地对任何操作的结果进行装饰。微软的 Lucian Wischik 展示了如何采用这种特性的优势,以使得您的端到端测试结果更加健壮。

使用 Mr.Flakey 就跟在 Windows 8 或者 Windows Phone 8 应用的每一个 await 语句后面加上“.Flakey()”一样简单。

复制代码
Dim r = Await
http.GetStringAsync(uri).Flakey()

启用之后,每个异步调用都将会触发一个对话框,用户可以选择点击“ok”按钮, 这样会像正常一样返回结果,或者点击“fail”按钮来模拟一个网络或者服务器异常。

为什么使用这种随机测试而不编写一套全面的单元测试用例呢?Lucian 解释如下:

单元测试:以我个人的经验,单元测试在测试分布式算法中并不是非常有效。测试的时候需要花费相当多的努力建立环境(比如,模拟网络环境),而且这种测试方法注定不够全面,并且以我个人经验来看,单元测试实在是不太适合于发现分布式环境下的缺陷。我怀疑这是因为程序员的大脑经常会沿着他们算法中“正确”的路径进行思考,而不太擅长面对其他各种错误路径。

(想一想:当你查看并发程序代码的时候,你是不是一个仅仅通过查看代码就能够发现竞争条件的人?你团队中有人能够做到这个吗?你曾经写过一个发现竞争条件的单元测试用例吗?至少我还没有过)

随机测试: 发现缺陷的一个非常棒的方式是交互式的随机测试。如果通过用户界面就能非常容易地模拟错误,你就几乎可以将自己的脑袋设置成自动导航模式,随机地点击界面上的各个位置,很快就能发现应用程序运行行为不正确的地方。

我被 Leslie Lampor 在 1990 年研究的“时态逻辑检查器”迷住了 -- 这是一种自动探索巨大指数空间可能性的方法(类似于我们在分布式算法中所面对的问题)。他所发现的在可能性空间“自动随机遍历”最后在实践中证明确实能够发现所有的缺陷,并且远远比对每一个可能性进行详尽测试更加有效。

查看英文原文 Thoughts on Unit Testing vs Ad-hoc Testing with Asynchronous Code


感谢赵震一对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

2014-08-26 17:172061

评论

发布
暂无评论
发现更多内容

小白必看,通俗易懂的LockSupport

程序猿阿星

Java并发 线程协作 LockSupport 线程间通信

手把手体验远程开发,确实爽

程序员鱼皮

Java Python 软件 大前端 后端

兰宝环保 | 新体系“行动计划”中化工制药行业VOCs废气治理要点

叶落便知秋

Erda 1.1 版本发布|3 大亮点特性最新解读

尔达Erda

开源 云原生 k8s PaaS SaaS

本夕生活小程序定制开发

ALVIS

泰国Ascend Money用开源软件加快应用交付

BeeWorks

阅读

以两种异步模型应用案例,深度解析Future接口

华为云开发者联盟

Java 模型 异步 FutureTask Future接口

详解Camtasia的PPT录制功能

淋雨

视频剪辑 Camtasia 录屏软件

INFRA-JOY微服务治理验证工程实践分享

徐敏

微服务 自动化测试 全链路压测 性能压测

Java程序员必备框架—Spring全家桶的前世今生详细梳理

北游学Java

Java spring

数据对AI的重要性:采访首席数据官Rick McFarland - LexisNexis Legal & Professional

BeeWorks

阅读

3D地图与3D柱状图联合使用

ThingJS数字孪生引擎

大前端 地图 可视化 数字孪生

瞥一瞥AI,撩一撩算法

博文视点Broadview

阿里云视频云发布实时高清VVC编码器Ali266,真正开启VVC商用之路

阿里云CloudImagine

阿里云 视频编码 视频处理 编码器 视频云

中易通科技禾禾实验室产品培育田

叶落便知秋

大厂面试真题——Netty/IO篇,你能答上来几道?

Java架构师迁哥

Using side features: feature preprocessing

毛显新

自然语言处理 深度学习 tensorflow 推荐系统 keras

WorkPlus高端制造业数字化解决方案—首发集团

BeeWorks

开源 企业 即时通讯 移动开发

女巫面具系统模式开发

ALVIS

剖根问底:Java 不能实现真正泛型的原因是什么?

沉默王二

java

大数据实战训练营Hbase作业

Clarke

WorkPlus高端制造业数字化解决方案—科达洁能

BeeWorks

开源 企业 解决方案 即时通讯

TensorFlow Recommenders: Quickstart

毛显新

深度学习 tensorflow 推荐系统 keras

来吧!一文写清前端面试难点及考点

前端依依

面试 大前端 经验总结

IDEA http client无法解析enviroment file

crazylle

IDEA http client Alibaba Cloud Toolkit

SpringBoot自动配置原理解析

程序员阿杜

spring Boot Starter

绿森林回收系统小程序开发

ALVIS

ElasticJob 3.0.0:打造面向互联网生态和海量任务的分布式调度解决方案

SphereEx

数据库 开源

区块链去中心化钱包开发|开发去中心化钱包

Geek_23f0c3

钱包系统开发 去中心化交易所系统开发 去中心化钱包 去中心化交易所

CloudQuery v1.4.1 发布 | 开放「组织架构」模块 API

BinTools图尔兹

数据库 数据安全 OpenAPI 数据库管控

互联网大厂一手资料,25大专题,500多页,背废你就能吊打面试官

Java架构师迁哥

单元测试VS异步代码随机测试的随想_软件工程_Jonathan Allen_InfoQ精选文章