写点什么

单元测试 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:172053

评论

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

flutter系列之:如丝般顺滑的SliverAppBar

程序那些事

flutter 程序那些事

学习java开发技术应该如何入手

小谷哥

云计算的六大核心技术,你了解多少?

Finovy Cloud

云技术 云渲染

卡塔尔世界杯出现了半自动越位识别技术、动作轨迹捕捉等黑科技。

汀丶人工智能

12月日更 12月月更 世界杯黑科技

KCL - 让 Kubernetes 资源清单管理更容易

Peefy

编程 Serverless Kubernetes #开源 #DevOps

数据生态第四弹 | OpenMLDB Hive Connector,架构起数据仓库到特征工程的生态桥梁

第四范式开发者社区

人工智能 机器学习 数据库 开源 特征

【前端相关】服务端渲染和客户端渲染的比较

No8g攻城狮

CSS css3 前端 js 前端框架

2022年11月中国汽车智能网联月度观察

易观分析

汽车 智能网联

架构实战营 2-6 钱包高可用实战随堂练习

西山薄凉

「架构实战营」

带你实现react源码的核心功能

flyzz177

React

时序数据库破局开放探讨

YMatrix 超融合数据库

物联网 时序数据库 超融合数据库 数据库架构选型 YMatrix

在成都培训web前端哪有比较好的机构

小谷哥

Java培训一般需要多长时间?

小谷哥

Java开发技术很难吗?

小谷哥

FLStudio21.0.0水果官方中文版发布功能介绍

茶色酒

FLStudio21.0.0

从React源码角度看useCallback,useMemo,useContext

flyzz177

React

YMatrix:超融合数据库如何在泵车智能运维场景实现 One for All 价值

YMatrix 超融合数据库

智能运维 三一重工 超融合数据库 智能化运维 YMatrix

前端培训学习前景怎么样

小谷哥

React 之 Context 的变迁与背后实现

冴羽

JavaScript 源码分析 前端 前端框架 React

Verilog 时延与过程结构

芯动大师

Verilog语法 Verilog延时 Verilog过程结构

JDK自带命令优化

@下一站

代码优化 12月日更 12月月更 jvm优化 java程序优化

架构实战营 2-5 微信红包分析随堂测验

西山薄凉

「架构实战营」

RocketMQ 在网易云音乐的实践

Apache RocketMQ

RocketMQ 消息

重磅 | 九科信息入选创新型中小企业(原深圳市专精特新企业)

九科Ninetech

Flink核心组件

穿过生命散发芬芳

flink 12月月更

易观分析潘玉宇:信贷全流程化监管将成行业发展重点,银行间联合风控程度将逐渐加深

易观分析

银行 普惠金融

“智造新未来”欧比护理智造总部奠基仪式

联营汇聚

演讲实录|OpenMLDB 与阿里云 MaxCompute 生态集成

第四范式开发者社区

人工智能 数据库 开源 时序数据库 特征

2022-12-12:有n个城市,城市从0到n-1进行编号。小美最初住在k号城市中 在接下来的m天里,小美每天会收到一个任务 她可以选择完成当天的任务或者放弃该任务 第i天的任务需要在ci号城市完成,

福大大架构师每日一题

算法 rust 福大大

北京同仁堂两大名牌品种亮相帝都

联营汇聚

【IntelliJ IDEA】【SVN】SVN详细的介绍和Idea中如何使用SVN

No8g攻城狮

ide svn Git Submodule git fetch IDEA DeBug

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