写点什么

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

评论

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

第十周总结

fmouse

极客大学架构师训练营

架构师训练营第十周作业

_

极客时间架构师一期 第十周作业

尾调用与尾递归

helbing

算法

架构师训练营—第十周学习总结

Geek_shu1988

架构师训练营—第十周作业

Geek_shu1988

架构师训练营一期学习心得

cc

刘华:上云后,你的架构设计可以更飞

刘华Kenneth

云计算 架构设计 技术选型 云平台

一万三千字的HashMap面试必问知识点详解

Java 编程 面试 计算机

第十周作业

fmouse

极客大学架构师训练营

架构师训练营 1 期第 10 周:模块分解 - 总结

piercebn

极客大学架构师训练营

Java-Mock简化单元测试

落日楼台H

Java 测试 单元测试 Mock Mock测试框架

试试,阿里P7的笔试题:多线程按序打印如何实现?

Java架构师迁哥

《华为数据之道》读书笔记:第 5 章 面向“联接共享”的数据底座建设

方志

大数据 数据中台 数据仓库 数字化转型

LeetCode题解:860. 柠檬水找零,模拟情境,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

一次有效的产品需求头脑风暴

Bruce Talk

敏捷开发 Agile Product Owner

今日份学习之Spring Boot自动配置实现原理

比伯

Java 编程 架构 面试 计算机

在网上的AG账户登录异常说是涉嫌套利不给办理取出怎么办?

Geek_a6658e

专业出黑团队

架构师Week6总结

lggl

总结

redis 基础数据 sets 业务场景分析

sinsy

redis 业务场景分析

食堂就餐卡系统设计

cc

STL 源码剖析之五大组态常量介绍

程序员贺同学

c++ 源码 后端 stl

架构师训练营第十周总结

_

总结 极客大学架构师训练营

如果不想你被称做掉包侠,那么请有效地学习机器学习算法知识

计算机与AI

学习

架构师训练营第 1 期第 10 周作业

好吃不贵

极客大学架构师训练营

初学小白你不知道的C语言经典算法(附带答案)

ShenDu_Linux

c++ 程序员 算法 C语言 数据结构与算法

在Spring data中使用r2dbc

程序那些事

WebFlux R2DBC 程序那些事 spring data spring-data-r2dbc

刘华:我最近听到最对味的话,就是“先Scale down再Scale out”

刘华Kenneth

DevOps 敏捷

架构师训练营第六周作业

丁乐洪

作业-第6周

arcyao

架构师训练营第 1 期 -- 第十周作业

发酵的死神

极客大学架构师训练营

大家都知道jmeter,但是它会让你的工作效率至少提升80%

996小迁

Java 编程 程序员 架构 面试

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