厕所、想测试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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Google软件测试之道是一本非常受欢迎的软件测试指南,其原文名为《Google's Testing on the Toilet》。这本指南由Google工程师撰写,旨在帮助软件测试人员提高他们的技能和知识。 这本指南通过简洁明了的短文和插图的形式呈现,使得读者可以轻松理解和掌握其中的内容。这些短文通常打印在洗手间的墙上,因此得名“Testing on the Toilet”。这种独特的传播方式确保了更多的人可以接触到这些知识,并促使他们在进行生活琐事的同时也能够学到一些新的技术。 这本指南介绍了许多软件测试的基础概念和技巧,如单元测试、集成测试、自动化测试等。它还涵盖了测试策略、Bug管理和持续集成等领域的内容。这些知识不仅适用于谷歌内部的测试团队,也对其他软件开发组织的测试人员具有很大的参考价值。 《Google's Testing on the Toilet》强调了测试的重要性和高效性。它告诉读者通过合理的测试方法和技术可以有效减少软件缺陷和Bug的数量,提高软件质量。它还推崇了持续学习和不断探索新技术的态度,鼓励测试人员积极参与到软件开发的早期阶段,以便更好地发现和解决问题。 总之,《Google's Testing on the Toilet》是一本非常实用的软件测试指南,它以简洁明了的书写方式展示了许多测试的最佳实践。通过学习和应用其中的知识,测试人员可以提高他们的技能水平,更好地为团队和产品提供稳定和高质量的软件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值