Testing 在实践行为驱动开发(BDD)时,我应该在何时以及在多大程度上测试第三方代码集成?

Testing 在实践行为驱动开发(BDD)时,我应该在何时以及在多大程度上测试第三方代码集成?,testing,tdd,integration-testing,bdd,Testing,Tdd,Integration Testing,Bdd,上下文:我试图在RubyonRails环境中使用Capybara/Steak进行集成测试,因此这将是我使用的示例,但这个问题是关于BDD最佳实践的一般性问题 假设我有这样一个(公认的广泛)用户故事: Feature: As an administrator I should be able to manage my products 我一直在关注Rails 3的ActiveAdmingem,它允许您使用简单的DSL创建复杂的管理界面。虽然节省时间的潜力是巨大的,但我也害怕在根本不进行测试的

上下文:我试图在RubyonRails环境中使用Capybara/Steak进行集成测试,因此这将是我使用的示例,但这个问题是关于BDD最佳实践的一般性问题

假设我有这样一个(公认的广泛)用户故事:

Feature:

As an administrator

I should be able to manage my products
我一直在关注Rails 3的
ActiveAdmin
gem,它允许您使用简单的DSL创建复杂的管理界面。虽然节省时间的潜力是巨大的,但我也害怕在根本不进行测试的情况下将如此多的功能卸载到第三方代码中

然而,有人告诉我,您通常只需要测试自己编写的代码。因此,根据这种逻辑,我只需要测试
ActiveAdmin
是否正确集成,因为这是我实际编写的唯一代码。测试这一点的基本场景可能是:

Scenario:

Given I have 20 products

When I visit the product index page

Then I should see 20 products.
这是一个由
ActiveAdmin
提供的现成功能。因此,我可以使用
ActiveAdmin
的文档进行基本安装并创建产品管理页面,场景就会通过

当然,我还集成了大量其他场景,例如:

Given I have 20 products

And my products include Apples, Bananas, and Berries

When I sort my products by name

Then Apples, Bananas and Berries should be on the first page in that order.

Given I have 20 products

And my products include Apples, Bananas, and Berries

When I type 'ap' into the Filter by Name field

Then I should see "Apples"

And I should not see "Bananas"
等等等等

但据推测,它们已经由
ActiveAdmin
进行了测试,因此我不需要再次测试它们,即使它们对我的应用程序至关重要。所以我想我已经完成了,可以转到另一个功能(?)


TL;DR:我的基本问题是,我是否应该为排序和筛选等关键功能编写场景,即使它们已经由外部库提供,并且我已经测试了我的应用程序与该库的集成?

BDD和场景的主要优势在于,它可以让您通过场景对话分享共同的理解

因为看起来你是团队中唯一的一个人,你从场景中获得的价值将来自于仔细思考它们,为将来的“你”捕获它们,你将使用它们作为已经开发的东西的提醒,并将它们自动化以用作回归测试

如果您认为场景是显而易见的,那么您不必捕获或自动化场景。对于使用库的明显功能,了解该功能就足够了,并且只编写关于奇数边缘情况(如果存在)的场景

这是因为BDD的主要关注点不是测试。BDD提供了一个词汇表和对话框架,帮助我们分享理解,特别是发现误解,使软件更易于更改和维护。我们可以把自动化作为一个很好的副产品

如果您想实际测试您的应用程序是如何工作的,您应该继续这样做。如果您没有更改正在测试的位,那么您只需要手动测试一次

请注意,您混淆了故事模板和场景模板,这是没有帮助的。故事通常是通过细分功能的小片段,以更快地获得反馈

As admin
I want to sort my products
So that I can find things easily by name.
场景是功能行为的一个特定示例,通常使用“给定、时间、然后”语法:


那么,快速回答:不,您不需要为软件库提供的行为编写场景。您可以手动测试它们,然后转到更有趣的内容。

谢谢,@Lunivore!这对我来说是有意义的——我想自从我开始测试以来,我就忘记了有时候确实可以查看您的界面并确保某些功能正常工作=P感谢您对功能/场景混淆的了解。我编辑了我的问题,以提供更多正确的例子。
Given I have a 120 products
And my products include Apples, Bananas and Berries
When I sort my products by name
Then Apples, Bananas and Berries should be on the first page in that order
And the products should be paginated.