上厕所、想测试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
相关推荐
这是Actions on Goolge 找台湾厕所项目源码 如何使用 dialogflow/find_toilet.zip 是 DialogFlow 项目,你可以导入到你的项目中 find_wc 文件夹是 Cloud Run 的 nodejs 代码 Cloud Shell 命令 #---使用Cloud Build...
上厕所时间获取手腕上浴室锁的状态,以便知道什么时候到了上厕所时间。 这是为了解决 Pebble HQ 的浴室排队问题而开发和迭代的,后来演变成一个公共示例应用程序,在 JSConf 2015 上进行演示。 该项目由三个组件组成...
学校的政策规定,出于隐私保护的考虑,不允许成人进入洗手间,因此,一群年轻的老师发现马桶满溢的时间比预期的要长。 在这个不幸的发现之后,老师们把整个班级带进了洗手间,然后让他们写一篇关于他们所看到的东西...
该项目名为"Ice_cream_cone_Toilet",从名称上看,这可能是一个创意或者趣味性的编程项目,将冰淇淋甜筒与厕所元素相结合,可能寓意着一种新颖的设计理念或技术实现。在IT行业中,这种独特的命名方式往往用于吸引...
3. 物体和地方的英语词汇:测试涉及到了如“kite”,“hall”,“toilet”,“classroom”等物体和地方的英文名称,这有助于学生扩大词汇量,了解不同场景下的英语用词。 4. 询问方式的英文表达:如"How much",...
厕所拖车 这是我朋友的 Jekyll 网站
这篇文档是针对牛津高中模块六第一单元的小测试,主要涵盖英语词汇、短语和完形填空的复习。以下是相关知识点的详细解释: 1. 重点单词: - 撕,扯 (vt.):tear - 幽默 (n.):humor/humour - 使愉快, 使高兴 (vt...
厕所机器人 厕所机器人是Arduino传感器的系统,向Raspberry Pi报告浴室的失速情况。 然后,此信息将发布到Slack。 传感器设置 硬件 Arduino传感器非常简单,由三个组件组成: Arduino(建立在以提高电池效率) 无线...
小明找厕所 0 介绍 支持ios和android两个平台 下载:git clone 安装:cd toilet --> npm install --> react-native run-ios(run-android) 服务端:具体看下面说明 1、express开发 1.1 npm环境设置 安装node...
- **情景**: 寻找洗手间。 - **常用表达**: - "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 ...
”答案可能是"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# 支持Unity版本2023.1.9f1及以上 欢迎来到益智游戏“急着去厕所”的有趣世界!沉浸在令人兴奋的冒险中,您的绘画技巧将成为关键工具。 游戏的...
- `toilet`:厕所,小男孩需要去的地方。 - `foxes`:狐狸,故事中的两个主角。 - `spring`:春天,他们去年春天结婚。 3. **完成句子(汉译英)**: - `encourage sb. to do sth.`:鼓励某人做某事,这里填入`...
- 使用方法:cowsay后跟想要说出的话,例如$cowsay "I am not a cow, hahaha"。 - 可以通过cowsay -l列出所有可用的动物模型,使用-f选项指定动物类型。 - 可以结合fortune命令使用,例如$fortune | cowsay。 4. ...
- bathroom:浴室,包括洗澡和厕所设施的空间。 - flushing system:冲水系统,马桶的冲洗装置。 - flush toilet:抽水马桶,带有冲水功能的坐便器。 - flush pipe:冲水管,连接马桶和排水系统的管路。 - foul...
1. Copy(正确抄写下列单词、词组和句子):此任务要求学生正确抄写单词,如"joe"、"where's"、"the toilet"、"it's here"等,强调了正确的拼写、大小写和标点符号的使用。 2. 阅读理解或写作练习:虽然这部分的具体...
jsfour-toilet 一个脚本,可以满足您的需求。 信息 输入您要使用的事件。 在菜单中或通过触摸按钮即可。 如何触发事件:TriggerEvent('pee')和TriggerEvent('poop') Example#1-一按一个按钮 Citizen....
1. 洗手间:toilet或bathroom 2. 邮票:stamp 3. 明信片:postcard 4. 浴室:bathroom 5. 匆忙:hurry (名词和动词) 6. 全体职工:staff 7. 葡萄:grape 8. 东方:east (名词和形容词) 9. 商场:mall或shopping ...
FIGlet和TOIlet字体浏览器===============================从上面的文件,下载主脚本* asciiart-font-browser *。 它是一个独立的bash脚本,称为figlet或厕所。 请确保首先安装了Figlet或马桶。 $ sudo apt-get ...
- I’m going to the toilet/washroom. 我要去卫生间。 - Where are you going? Where would you like to... 你要去哪里?你想去哪里? 这些词汇和表达是保安人员日常工作中不可或缺的部分,它们涵盖了消防安全、...