写点什么

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

评论

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

推特(twitter)涨粉提高关注量应该怎么做?如何让Twitter账号涨粉推特怎么涨粉?Discord怎么拉人?telegram怎么拉人?ins,油管,脸书怎么涨粉?有没有运营的比较成功的twitter大帐号?

区块链项目一站式包装孵化

推特是否能够买粉买赞?

区块链项目一站式包装孵化

区块链常见的软文推广媒体宣发方式有哪些?

区块链项目一站式包装孵化

如何做好一场老外露脸出镜的币安直播AMA?

区块链项目一站式包装孵化

AI Agent框架(LLM Agent):LLM驱动的智能体如何引领行业变革,应用探索与未来展望

汀丶人工智能

人工智能 大模型 agent

IPv4与IPv6的区别终于有人讲清楚了!

IPIDEA全球HTTP

IP地址

软工智库|低代码篇(三)——低代码开发平台如何实现?

电子标准院软工研究室

如何通过币安玩转币圈【适合新手小白】

区块链项目一站式包装孵化

区块链项目孵化:关键步骤与重要内容

区块链项目一站式包装孵化

备战牛市主升浪,我对本轮周期的阶段性思考

区块链项目一站式包装孵化

泛娱乐出海新风口,视频云技术需要怎样的融合创新?

阿里云CloudImagine

云计算 音视频 视频云 泛娱乐出海 AIGC

给刚进入币圈的新人小白的几点建议

区块链项目一站式包装孵化

全过程的区块链项目包装孵化都包含啥?

区块链项目一站式包装孵化

区块链开发:区块链软件开发包装相关解析

区块链项目一站式包装孵化

比特币相比其他投资产品,有何区别?

区块链项目一站式包装孵化

软文发稿:雅虎媒体套餐投放内容有哪些

区块链项目一站式包装孵化

TP钱包如何上代币、收录LOGO(TokenPocket)tp钱包上传代币LOGO

区块链项目一站式包装孵化

纳斯达克大屏投放:品牌塑造的开始一环!

区块链项目一站式包装孵化

如何在币圈抓住新叙事,牛市的布局策略!

区块链项目一站式包装孵化

玩币归赵之币圈首富赵长鹏

区块链项目一站式包装孵化

腾讯会议如何补充人数(充场)?大会议室如何建立?

区块链项目一站式包装孵化

区块链媒体宣发,区块链项目推广,一站式宣发能提供哪些服务?

区块链项目一站式包装孵化

一个万倍meme币是如何诞生的?

区块链项目一站式包装孵化

币圈项目为什么要做cmc+cg(双c)?

区块链项目一站式包装孵化

项目利用宣传片等视频进行宣发有何优势?

区块链项目一站式包装孵化

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