大模型“四虎”出山,亮相 4 月 QCon 北京。 了解详情
写点什么

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

评论

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

Smart Finance 热启动创世开启,参与质押瓜分SMART资产

股市老人

2023年1月国产数据库大事记-墨天轮

墨天轮

数据库 opengauss TiDB oceanbase 国产数据库

Multicoin Capital资本2023展望

股市老人

架构7作业

梁山伯

热启动预示生态起航的Smart Finance,与深度赋能的SMART通证

股市老人

ChatGPT:“Hello Alluxio,我为你写了一首诗!”

Alluxio

presto 分布式, Alluxio 大数据 开源 ChatGPT

手写一个前端存储工具库

jump-jump

JavaScript typescript 缓存 性能优化 工具库

Innodb 的RR 是否彻底解决了幻读?

想要飞的猪

innodb 隔离级别 幻读

文盘Rust -- 领域交互模式如何实现

京东科技开发者

rust 逻辑 交互 企业号 2 月 PK 榜 interactcli-rs

信息论绪论

timerring

信息论 信息论与编码

【Redis故障排查】「连接失败问题排查和解决」带你总体分析和整理Redis的问题故障实战开发指南及方案

洛神灬殇

redis 故障排查 2月日更 故障排查/诊断

热启动预示生态起航的Smart Finance,与深度赋能的SMART通证

鳄鱼视界

“唤醒”闲物、“童”心共享

最新动态

能取代90%人工作的ChatGPT到底牛在哪里

慕枫技术笔记

人工智能 后端 ChatGPT

一文盘点,ZBC的应用场景与通缩场景

西柚子

MQTT协议快速体验

EMQ映云科技

开发 物联网 IoT mqtt 企业号 2 月 PK 榜

某财税集团:使用进步的技术,对业务降本提效

OceanBase 数据库

数据库 oceanbase

日日顺供应链|想要看清供应链发展趋势,先回答这三个问题!

联营汇聚

Smart Finance 热启动创世开启,参与质押瓜分SMART资产

鳄鱼视界

从输入URL到渲染的完整过程

loveX001

JavaScript

物联网首选协议,关于MQTT你需要了解这些

EMQ映云科技

物联网 IoT mqtt 企业号 2 月 PK 榜 消息传输

什么是极速文件传输,极速文件传输如何进行大文件传输

镭速

ChatGPT是什么?怎么用?如何提效?怎么赚钱变现?

王中阳Go

深度思考 高效工作 学习方法 AI ChatGPT

dotnet 8 preview 1 即将发布

newbe36524

C# Docker Kubernetes

前端培训机构哪家比较适合学习

小谷哥

BATMAN:将双边注意力用于视频对象分割

Zilliz

计算机视觉

2023-02-13:力扣数据中心有 n 台服务器,分别按从 0 到 n-1 的方式进行了编号 它们之间以「服务器到服务器」点对点的形式相互连接组成了一个内部集群 其中连接 connections 是

福大大架构师每日一题

算法 rust 福大大

京东前端经典面试题整理

loveX001

JavaScript

瓴羊Quick BI报表分析工具,专业数据分析人员的“神辅助”

对不起该用户已成仙‖

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