gpt4 book ai didi

ruby-on-rails - 集成测试应该包含多少内容?副作用在哪里测试?

转载 作者:行者123 更新时间:2023-12-02 01:49:36 25 4
gpt4 key购买 nike

假设我有一个功能要求,当用户成功注册付费帐户时,会发生几件事:

  1. 用户账户已创建
  2. 用户的信用卡被扣款,产生新的交易记录
  3. 通过电子邮件将收据发送给用户

我见过的大多数 rspec 集成或 cucumber 测试都非常专注于屏幕上显示的内容,例如expect(page).to have_text(X)然后我应该看到 X

这里的集成测试应该覆盖多少?

集成测试是否应该检查...

  • 创建了帐户记录?
  • 交易已创建?
  • 交易金额正确吗?
  • 收据电子邮件已发送?

为什么或为什么不?如果不是,应该在哪里/如何测试这些类型的副作用?

最佳答案

如果您从外向内开发,您的大部分集成测试将是验收测试。这些是关于用户所看到的,因此他们从外部与系统交互。他们不查看数据库或以其他方式进入幕后。他们不需要:如果有理由在数据库中保存一些东西,如果它出现在屏幕上,我们就会知道它是否有效。他们确实需要测试电子邮件是否已发送或帐户是否已在第三方信用卡处理系统中创建,因为这些是用户看到的内容的一部分。

实现所有验收测试后,您可能会以工程师的身份审视系统,并认为系统中的类如何相互交互或与外部系统交互的某些方面没有经过充分测试。首先,确定这些是否告诉您验收测试中真正应该包含的要求(通常是这种情况),如果是,则改进验收测试。

您可能仍然觉得需要编写更多不是验收测试的集成测试,并且它们可能需要直接查看数据库或其他内容。根据我的经验,这些是少数。

也就是说,有时验收测试在场景中期停止并只测试副作用是有实际意义的,因为另一个验收测试已经描述了场景的其余部分。 (例如,也许有 18 种不同的方法可以在您的应用程序中创建一个帐户。也许它们都会在中间场景中在数据库中产生相同的帐户。)同样,您可能想要伪造一些数据库状态并从中间开始-避免重复的场景;通过用户登录执行此操作很常见。

在您的应用程序实现所有验收测试并具有良好的集成覆盖率后,使用单元测试测试细节,测试副作用。但是,如果您的验收/集成测试已经充分测试了一段给定的代码,它就不需要单元测试,并且它的副作用可能永远不会被直接测试——这很好。

关于ruby-on-rails - 集成测试应该包含多少内容?副作用在哪里测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23619785/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com