Ruby on rails 集成测试最佳实践

Ruby on rails 集成测试最佳实践,ruby-on-rails,testing,integration-testing,Ruby On Rails,Testing,Integration Testing,我查看了stackoverflow,可以找到一些和这个标题类似的问题,但没有一个能回答我的问题。抱歉,如果这是重复的 在统一测试中,有一条指导方针说“统一”。通过阅读stackoverflow和internet,人们普遍认为这一规则可以放宽一点,但每个单元测试都应该测试代码的一个方面或一种行为。这很有效,因为当测试失败时,您可以立即看到失败的内容,并修复它,很可能测试在将来的其他时间不会再次失败 这对Rails单元测试很有效,我也一直在使用它进行功能测试,没有任何问题。但是当涉及到集成测试时,您

我查看了stackoverflow,可以找到一些和这个标题类似的问题,但没有一个能回答我的问题。抱歉,如果这是重复的

在统一测试中,有一条指导方针说“统一”。通过阅读stackoverflow和internet,人们普遍认为这一规则可以放宽一点,但每个单元测试都应该测试代码的一个方面或一种行为。这很有效,因为当测试失败时,您可以立即看到失败的内容,并修复它,很可能测试在将来的其他时间不会再次失败

这对Rails单元测试很有效,我也一直在使用它进行功能测试,没有任何问题。但是当涉及到集成测试时,您应该在测试中有许多断言,这有点含蓄。除此之外,他们通常重复已经在功能测试和单元测试中完成的测试

那么,在这两个因素中编写集成测试时,哪些被视为良好实践:

  • 集成测试的长度:如何测量何时将集成测试拆分为两部分?请求的数量?越大越好
  • 集成测试的断言数量:是否每次都要重复单元测试和功能测试中给出的关于系统当前状态的断言,或者是否在测试结束时只有5个左右的断言来测试是否生成了正确的输出

  • 希望有人能提供一个更权威的答案,但我的理解是,集成测试应该围绕一个特定的特性构建。例如,在在线商店中,您可以编写一个集成测试以确保可以将项目添加到购物车中,并编写另一个集成测试以确保可以签出

    集成测试应该多长时间

    只要它能覆盖一个特征,就行了。有些特征是小的,有些是大的,它们的大小取决于味道。当它们太大时,可以很容易地分解为几个逻辑子特征。当它们太小时,它们的集成测试将看起来像视图或控制器测试

    他们应该有多少断言

    尽可能少,但仍然有用。所有的测试都是这样,但是集成测试的速度非常慢,这一点更加重要。这意味着只测试最重要的东西,尽量不测试其他数据隐含的东西。在签出功能的情况下,我可能会断言订单是为正确的人创建的,并且具有正确的总数,但不测试确切的项目(因为我的体系结构可能会从项目生成总数)。在此之前,我不会做任何我不必做的断言,因为遍历填充此字段的应用程序,单击该按钮,等待此模式打开会覆盖我需要测试的所有集成行为,如果需要测试,视图测试可以覆盖任何其他内容


    总的来说,这意味着单元测试通常只有几行长,前面有一个更大的设置块,而Rails集成测试通常有十几行长或更多(其中大多数是交互测试),集成测试的长度:我同意这里的长度并没有多大关系。更多的是关于您正在测试的功能以及测试它需要多少步骤。例如,假设您正在测试一个包含五个步骤的向导,该向导创建一个项目。如果相关数据出现在屏幕上,我会将所有五个步骤放在一个测试结束检查中。但是,如果向导允许涵盖不同的场景,我将拆分测试


    集成测试的断言数量:不要测试已经在其他测试中测试过的东西,但是确保满足用户期望。那么测试什么,用户希望在屏幕上看到的不是后端特定的代码。有时您可能仍然需要检查数据库中是否有正确的数据,例如,当它不应该出现在屏幕上时。

    谢谢您的回答+感谢你的勇敢,成为几周后的第一个。