Ruby on rails 把像测试一样的测试分组到一个测试中是不是不好?

Ruby on rails 把像测试一样的测试分组到一个测试中是不是不好?,ruby-on-rails,ruby,testing,Ruby On Rails,Ruby,Testing,我的团队在Rails上使用Cucumber/Ruby。我们有以下几种情况: Scenario: Create a Data Set Scenario: Update a Data Set Scenario: Invalid Data Set - Invalid Name Scenario: Invalid Data Set - Missing Source Scenario: Invalid Data Set - Invalid Rate ... 一位同事要求我将所有无效测试组合到一个场景中。

我的团队在Rails上使用Cucumber/Ruby。我们有以下几种情况:

Scenario: Create a Data Set
Scenario: Update a Data Set
Scenario: Invalid Data Set - Invalid Name
Scenario: Invalid Data Set - Missing Source
Scenario: Invalid Data Set - Invalid Rate
...
一位同事要求我将所有无效测试组合到一个场景中。他的理由是,当我们与我们的质量团队坐在一起时,我们必须大声朗读所有场景,只阅读一个场景而不是多个场景可以节省时间

Scenario: Create a Data Set
Scenario: Update a Data Set
Scenario: Invalid Data Set
  # Steps for invalid name
  # Steps for missing source
  # Steps for invalid rate
我不认为我能同意这一点,因为我觉得测试应该完全孤立。如果我想添加一个新的无效场景,那么如果将它们组合在一起,我将不得不运行更多的代码。我想知道是否有人有更正式的答案


像测试一样将测试分组到一个测试中不好吗?

一般来说,将测试集中在一起是一件不好的事情-跳过断言之间的设置/拆卸阶段可能会导致排序问题,其中先前的测试会导致测试失败/通过

然而,如果您只是测试一条记录不应该是有效的,并且用户应该得到关于错误的完整反馈,那么在一个场景中有多个断言实际上是有意义的。尤其是因为它可能要快得多,因为您没有为每个应用程序运行完整的请求周期

Scenario: Creating a thing with invalid data
  When I create a thing without filling in the required fields
  Then I should see "Invalid Name"
  Then I should see "Missing Source"
  Then I should see "Invalid Rate"

一般来说,将测试集中在一起是一件坏事——在断言之间跳过设置/拆卸阶段可能会导致排序问题,因为以前的测试会导致测试失败/通过

然而,如果您只是测试一条记录不应该是有效的,并且用户应该得到关于错误的完整反馈,那么在一个场景中有多个断言实际上是有意义的。尤其是因为它可能要快得多,因为您没有为每个应用程序运行完整的请求周期

Scenario: Creating a thing with invalid data
  When I create a thing without filling in the required fields
  Then I should see "Invalid Name"
  Then I should see "Missing Source"
  Then I should see "Invalid Rate"

我也相信测试的隔离性,但我认为您已经发现了一个案例,在这个案例中,一些更深层次的思考让我认为将这些特定的断言集中在一个测试中是好的。我的经验法则倾向于围绕关注点的分离。这并不意味着将这些作为单独的关注点,而是测试无效反馈是一个单一的关注点

当然,这是有道理的。如果你接受这种分离作为法则,你会发现自己在同一个测试中做了大量的断言,这也不好

另一个是@max在回答中提到的性能问题(这是一个很好的问题)

最后,您可能会发现,如果不将这些测试分离,就不可能将它们全部测试在一起。第一次试验的失败可能会阻止任何进一步的失败被发现。在Cumber中,这不是一个问题,因为您正在检查可视输出,而不是对代码失败执行断言

对于您的特定示例,在测试中测试无效条件似乎非常适合分组


一句话:你的头脑在正确的位置,你只需要记住,世界上几乎没有什么硬性规定是绝对不能被打破的

我也相信测试的隔离,但我认为您已经发现了一个案例,在这个案例中,一些更深入的思考让我认为将这些特定的断言集中在一个测试中是好的。我的经验法则倾向于围绕关注点的分离。这并不意味着将这些作为单独的关注点,而是测试无效反馈是一个单一的关注点

当然,这是有道理的。如果你接受这种分离作为法则,你会发现自己在同一个测试中做了大量的断言,这也不好

另一个是@max在回答中提到的性能问题(这是一个很好的问题)

最后,您可能会发现,如果不将这些测试分离,就不可能将它们全部测试在一起。第一次试验的失败可能会阻止任何进一步的失败被发现。在Cumber中,这不是一个问题,因为您正在检查可视输出,而不是对代码失败执行断言

对于您的特定示例,在测试中测试无效条件似乎非常适合分组

一句话:你的头脑在正确的位置,你只需要记住,世界上几乎没有什么硬性规定是绝对不能被打破的