`
coolas
  • 浏览: 6809 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
最近访客 更多访客>>
社区版块
存档分类
最新评论

厕所、想测试Google Testing on the Toilet (TotT):测试行为,而不是方法

 
阅读更多

上厕所、想测试Google Testing on the Toilet (TotT):测试行为,而不是方法

由Erik Kuefler 
本文改编自谷歌测试上厕所(TOTT)插曲。你可以下载一个打印机友好的版本,这TOTT插曲并张贴在你的办公室, 

 

写完一个方法后,很容易写只是一个测试来验证这个方法所做的一切。但是,认为测试和公有方法应该存在1:1的关系,这是非常有害的。我们真正要测试的是行为,而一个方法可能表现出很多的行为,另外,一个单一的行为有时会跨越多个方法。 让我们来看看一个验证了整个方法的糟糕的测试: 
@Test publicvoid testProcessTransaction() {
  User user = newUserWithBalance(LOW_BALANCE_THRESHOLD.plus(dollars(2));
  transactionProcessor.processTransaction(
      user,
      new Transaction("Pile of Beanie Babies", dollars(3)));
  assertContains("You bought a Pile of Beanie Babies", ui.getText());
  assertEquals(1, user.getEmails().size());
  assertEquals("Your balance is low", user.getEmails().get(0).getSubject());
}


显示所购买物品的名称,并发送余额减少的电子邮件,是两个独立的行为,但这个测试同时考虑了这两个行为,只是因为他们碰巧用同样的方法来触发。这样测试往往成为大而重,而且随着时间的推移,将变得难以维护,因为有其他行为需要不断的补充,最终导致难以判断到底是输入的哪一部分决定了断言。该测试的名称是被测方法的名称的直接镜象,就是一个不好的迹象。 更好的主意是:使用单独的测试,以验证不同的行为

 
@Test publicvoid testProcessTransaction_displaysNotification() {
  transactionProcessor.processTransaction(
      new User(), new Transaction("Pile of Beanie Babies"));
  assertContains("You bought a Pile of Beanie Babies", ui.getText());
}
@Test publicvoid testProcessTransaction_sendsEmailWhenBalanceIsLow() {
  User user = newUserWithBalance(LOW_BALANCE_THRESHOLD.plus(dollars(2));
  transactionProcessor.processTransaction(
      user,
      new Transaction(dollars(3)));
  assertEquals(1, user.getEmails().size());
  assertEquals("Your balance is low", user.getEmails().get(0).getSubject());
}


现在,当有人添加新的行为,他们会写针对该行为写新的测试用例。无论有多少行为被添加,每个测试用例将保持集中和易于理解。这会让你的测试用例更具弹性,因为增加新的行为的测试是不太可能破坏现有的测试;使得测试用例更清晰,因为每个用例只包含的测试一个行为的代码。 

原文地址:http://googletesting.blogspot.com/2014/04/testing-on-toilet-test-behaviors-not.html?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+blogspot%2FRLXA+%28Google+Testing+Blog%29

分享到:
评论

相关推荐

    find_taiwan_toilet:find_taiwan_toilet

    这是Actions on Goolge 找台湾厕所项目源码 如何使用 dialogflow/find_toilet.zip 是 DialogFlow 项目,你可以导入到你的项目中 find_wc 文件夹是 Cloud Run 的 nodejs 代码 Cloud Shell 命令 #---使用Cloud Build...

    toilet-time:ArduinoWebPebble 确定最佳上厕所时间的应用程序

    上厕所时间获取手腕上浴室锁的状态,以便知道什么时候到了上厕所时间。 这是为了解决 Pebble HQ 的浴室排队问题而开发和迭代的,后来演变成一个公共示例应用程序,在 JSConf 2015 上进行演示。 该项目由三个组件组成...

    toilet-transcripts:小学浴室混乱,现在已在代码中捕获

    学校的政策规定,出于隐私保护的考虑,不允许成人进入洗手间,因此,一群年轻的老师发现马桶满溢的时间比预期的要长。 在这个不幸的发现之后,老师们把整个班级带进了洗手间,然后让他们写一篇关于他们所看到的东西...

    Ice_cream_cone_Toilet:Ice_cream_cone_Toilet

    该项目名为"Ice_cream_cone_Toilet",从名称上看,这可能是一个创意或者趣味性的编程项目,将冰淇淋甜筒与厕所元素相结合,可能寓意着一种新颖的设计理念或技术实现。在IT行业中,这种独特的命名方式往往用于吸引...

    A Module 3 Places and activities测试题精选.doc

    3. 物体和地方的英语词汇:测试涉及到了如“kite”,“hall”,“toilet”,“classroom”等物体和地方的英文名称,这有助于学生扩大词汇量,了解不同场景下的英语用词。 4. 询问方式的英文表达:如"How much",...

    toilet-trailer:这是我朋友的网站

    厕所拖车 这是我朋友的 Jekyll 网站

    牛津高中模块六第一单元小测试精选.doc

    这篇文档是针对牛津高中模块六第一单元的小测试,主要涵盖英语词汇、短语和完形填空的复习。以下是相关知识点的详细解释: 1. 重点单词: - 撕,扯 (vt.):tear - 幽默 (n.):humor/humour - 使愉快, 使高兴 (vt...

    toilet-bot:机器人在厕所腾空时提醒人们

    厕所机器人 厕所机器人是Arduino传感器的系统,向Raspberry Pi报告浴室的失速情况。 然后,此信息将发布到Slack。 传感器设置 硬件 Arduino传感器非常简单,由三个组件组成: Arduino(建立在以提高电池效率) 无线...

    安卓java读取网页源码-react-native-example-toilet:react-native-example-厕所

    小明找厕所 0 介绍 支持ios和android两个平台 下载:git clone 安装:cd toilet --> npm install --> react-native run-ios(run-android) 服务端:具体看下面说明 1、express开发 1.1 npm环境设置 安装node...

    出国英语实用口语会话实例.docx

    - **情景**: 寻找洗手间。 - **常用表达**: - "Where is the restroom?" - "Is there a toilet nearby?" - "Can you point me in the direction of the washrooms?" ### Unit 25: No Photographing in the ...

    外研版英语五年级英语上册Module 10检测题精选.doc

    ”答案可能是"I found Lingling in the toilet." 二、重点知识点: 1. 动词的过去式:如find-went, say-said, jump-jumped等。 2. 反义词:如dangerous-safe,happy-sad等。 3. 情态动词should和shouldn't的用法,...

    Rush to Toilet 冲向厕所Unity类似绘制最短路径益智解谜游戏项目源码C#

    Rush to Toilet 冲向厕所Unity类似绘制最短路径益智解谜游戏项目源码C# 支持Unity版本2023.1.9f1及以上 欢迎来到益智游戏“急着去厕所”的有趣世界!沉浸在令人兴奋的冒险中,您的绘画技巧将成为关键工具。 游戏的...

    江西省吉安市吉水县八年级英语下册Unit9Haveyoueverbeentoamuseum同步练习II新版人教新目标版20180

    - `toilet`:厕所,小男孩需要去的地方。 - `foxes`:狐狸,故事中的两个主角。 - `spring`:春天,他们去年春天结婚。 3. **完成句子(汉译英)**: - `encourage sb. to do sth.`:鼓励某人做某事,这里填入`...

    ubuntu个性化设置及有趣命令

    - 使用方法:cowsay后跟想要说出的话,例如$cowsay "I am not a cow, hahaha"。 - 可以通过cowsay -l列出所有可用的动物模型,使用-f选项指定动物类型。 - 可以结合fortune命令使用,例如$fortune | cowsay。 4. ...

    英文电影之必备词汇大汇总

    - bathroom:浴室,包括洗澡和厕所设施的空间。 - flushing system:冲水系统,马桶的冲洗装置。 - flush toilet:抽水马桶,带有冲水功能的坐便器。 - flush pipe:冲水管,连接马桶和排水系统的管路。 - foul...

    A Module 3 Unit 1 My school测试题精选.doc

    1. Copy(正确抄写下列单词、词组和句子):此任务要求学生正确抄写单词,如"joe"、"where's"、"the toilet"、"it's here"等,强调了正确的拼写、大小写和标点符号的使用。 2. 阅读理解或写作练习:虽然这部分的具体...

    jsfour-toilet:可以满足您需求的脚本

    jsfour-toilet 一个脚本,可以满足您的需求。 信息 输入您要使用的事件。 在菜单中或通过触摸按钮即可。 如何触发事件:TriggerEvent('pee')和TriggerEvent('poop') Example#1-一按一个按钮 Citizen....

    广东省惠州市惠东县2017_2018学年九年级英语全册Unit3Couldyoupleasetellmewheretherest

    1. 洗手间:toilet或bathroom 2. 邮票:stamp 3. 明信片:postcard 4. 浴室:bathroom 5. 匆忙:hurry (名词和动词) 6. 全体职工:staff 7. 葡萄:grape 8. 东方:east (名词和形容词) 9. 商场:mall或shopping ...

    ASCII Art Font Browser:FIGlet和TOIlet的字体浏览器-开源

    FIGlet和TOIlet字体浏览器===============================从上面的文件,下载主脚本* asciiart-font-browser *。 它是一个独立的bash脚本,称为figlet或厕所。 请确保首先安装了Figlet或马桶。 $ sudo apt-get ...

    专题资料(2021-2022年)保安部英语.doc

    - I’m going to the toilet/washroom. 我要去卫生间。 - Where are you going? Where would you like to... 你要去哪里?你想去哪里? 这些词汇和表达是保安人员日常工作中不可或缺的部分,它们涵盖了消防安全、...

Global site tag (gtag.js) - Google Analytics