基于用户行为的测试,而不是基于方法的测试
来源:互联网 发布:js限制ip访问代码 编辑:程序博客网 时间:2024/04/28 15:11
作者:Erik Kuefler
原文链接:http://googletesting.blogspot.tw/2014/04/testing-on-toilet-test-behaviors-not.html
在写完一个方法之后,很容易写一个测试用例来验证这个方法的所做的一切。但是,认为测试用例和公共方法应该是一比一的关系是不利于测试的。我们真正要测试的是用户的行为,一个简单方法可以包括很多用户行为,同样一个简单的用户行为有时需要多个方法的来实现。
让我们来看看一个糟糕的测试用例,使用一个测试用例来验证整个方法:
@Test publicvoidtestProcessTransaction() {
User user = newUserWithBalance(LOW_BALANCE_THRESHOLD.plus(dollars(2));
transactionProcessor.processTransaction(
user,
new Transaction("Pileof Beanie Babies", dollars(3)));
assertContains("You bought aPile of Beanie Babies", ui.getText());
assertEquals(1,user.getEmails().size());
assertEquals("Your balanceis 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());
}
- 基于用户行为的测试,而不是基于方法的测试
- 基于测试行为,而不是测试实现
- 智能测试自动化——基于应用程序行为的模型驱动测试方法
- 细分方法研究网站用户行为(一):基于访问频次的用户行为研究
- 基于场景的测试
- 基于需求的测试
- 基于测试的开发
- 基于Web的系统测试方法
- 基于Web的系统测试方法
- 基于Web的系统测试方法[转]
- 基于Web的系统测试方法
- >+ 基于Web的系统测试方法
- 基于Web的系统测试方法
- 基于Web的系统测试方法[转]
- 基于Web的系统测试方法
- 基于Web的系统测试方法
- 基于Web的系统测试方法
- 基于Web的系统测试方法
- 基于测试行为,而不是测试实现
- 利用sql改写去掉执行计划中的filter
- Yii2修改配置文件识别post过来的json数据
- 『python学习』Python核心编程——面向对象编程
- Random随机数中获取指定范围内的随机数
- 基于用户行为的测试,而不是基于方法的测试
- Ubuntu/Win10双系统安全删除Ubuntu的方法
- Android MAT系列----------MAT的安装
- Markdown Notes01_About Markdown
- 进程和线程的区别
- 用R画中国地图...
- spring mvc简单上手
- Android四大组件之Service(一)本地服务
- 不要滥用Mock