我的团队正在使用Cucumber / Ruby on Rails。我们有一些方案如下:
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
我认为我不同意这一点,因为我觉得测试应该是完全孤立的。如果我想添加一个新的无效方案,那么如果将它们组合在一起,我将需要运行比我需要的更多的代码。我想知道是否有人有更正式的答案。
将测试组合在一起进行单一测试是不是很糟糕?
答案 0 :(得分:3)
我也相信测试的孤立,但我认为你已经找到了一个案例,其中一些更深层的想法让我认为在一次测试中将这些特定断言混合在一起就可以了。我的经验法则倾向于围绕关注点的分离。这并不意味着将这些视为单独的问题,而是测试无效反馈是一个单一问题。
当然,有一些问题。如果你接受这种分离作为法律,你会发现自己在同一个测试中放入了大量的断言,这也不好。
另一个是@max在他的回答中提到的表现问题(这是一个很好的问题)。
最后,您可能会发现不分离这些测试使得无法一起测试它们。第一次测试失败可能会导致任何进一步的失败。在黄瓜中,这不是一个问题,因为您正在检查视觉输出,而不是在代码失败时执行断言。
对于您的具体示例,在测试中测试无效条件似乎非常可组合。
底线:你的头是在正确的位置,你只需要记住,世界上很少有硬性和快速的规则永远不能被打破。
答案 1 :(得分:2)
一般来说,一起进行集总测试是一件坏事 - 在断言之间跳过设置/拆卸阶段会导致排序问题,而之前的测试导致测试失败/通过。
但是,如果您只是测试一条记录应该无效并且用户应该完整地获得有关错误的反馈,那么在单个场景中有多个断言确实有意义。特别是因为它可能明显更快,因为你没有为每个人运行一个完整的请求周期。
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"