阿里云「飞天发布时刻」2024来啦!新产品、新特性、新能力、新方案,等你来探~ 了解详情
写点什么

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

评论

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

HashData的湖仓一体思考:Iceberg、Hudi特性讲解与支持方案

酷克数据HashData

iPaas数据传输的方式

RestCloud

API ETL ipaas 数据传输方式

赢在起跑线:商品企划系统为鞋服品牌带来的竞争优势解析

第七在线

谈谈鸿蒙 Harmony 的跨端技术方案

Onegun

鸿蒙 HarmonyOS

项目包装宣发推广、白皮书官网搭建、ppt制作、mg动画设计

西安链酷科技

宣发

【前端早早聊直播回顾】Harmony 的跨端方案

Geek_2305a8

真香定律!我用这种模式重构了第三方登录

EquatorCoco

Python 重构 第三方登录 项目开发

低代码与AIGC技术:重塑软件开发的新篇章

EquatorCoco

低代码 AIGC 低代码人工智能

[自研开源] MyData 基于 Web API 的数据集成平台 v0.7.0

LIEN

开源 数据集成 业务融合 API对接 数据对接

选择适合舞台的LED租赁显示屏指南

Dylan

融资租赁 婚礼策划PPT LED显示屏 led显示屏厂家 舞台表演

解密Spring中的Bean实例化:推断构造方法(上)

不在线第一只蜗牛

Java spring 源码 bean

为什么要用云手机进行国外社媒监控?

Ogcloud

云手机 海外云手机 云手机海外版 国外云手机

金三银四,聊一聊软件测试简历书写/面试的必备技能

测吧(北京)科技有限公司

测试

文心一言 VS 讯飞星火 VS chatgpt (208)-- 算法导论15.4 5题

福大大架构师每日一题

福大大架构师每日一题

境外社交数据采集遇到的问题及云手机解决方案

Ogcloud

数据采集 云手机 海外云手机 云手机海外版 国外云手机

Python 服务实现可观测性最佳实践

观测云

Python 可观测性

淘宝商品详情数据接口用于ERP选品

tbapi

淘宝商品详情数据接口 淘宝API接口 淘宝商品数据采集 淘宝数据ERP

BSC链DAPP质押合约代币系统开发|详情需求|指南方案

西安链酷科技

DAPP系统开发

儋州市营商环境建设局:二维码一扫,办事更便捷!

草料二维码

二维码 草料二维码

结构化思维助力Prompt创作:专业化技术讲解和实践案例

快乐非自愿限量之名

技巧 项目开发 结构化 技巧分享

已解决org.springframework.beans.factory.support.BeanDefinitionValidationException Bean验证异常的正确解决方法,亲测有效!

小明Java问道之路

什么是云游戏?云游戏平台可以运行3A游戏吗?

Ogcloud

游戏 云游戏 3A游戏 3A云游戏

【教程】移动应用安全加固技术解析

低代码与数字经济:推动软件开发创新的新引擎

不在线第一只蜗牛

软件开发 低代码 数字经济

直播预告|从一张 CD 说起,关于播放器的前世今生

声网

BSC链DAPP质押合约代币系统开发

l8l259l3365

阿里巴巴淘口令API推动电商行业社交化营销创新

技术冰糖葫芦

API 接口

Pygame游戏开发:一次编写,多平台运行

技术冰糖葫芦

API 接口

打通易快报与金蝶K3Wise,实现采购流程高效协同!

聚道云软件连接器

案例分享

一次性搞定多任务!Python自动化复用浏览器技巧大揭秘

测吧(北京)科技有限公司

测试

你所不知道的端口耗尽(三)

快乐非自愿限量之名

Python 后端 端口 开发语言

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