首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >依赖数据的BDD测试的最佳策略是什么?

依赖数据的BDD测试的最佳策略是什么?
EN

Stack Overflow用户
提问于 2011-05-12 05:11:38
回答 2查看 3.2K关注 0票数 6

编写BDD测试的一些策略是什么,它可以测试依赖于系统中某些数据的行为?

例如,假设我正在处理以下场景:

代码语言:javascript
复制
Feature: Search for friend
    In order to find a friend
    As a user
    I want to search my list of friends
    And filter by 'first name'

除非/直到一些“虚拟”朋友被输入系统,否则这个测试怎么可能成功?

更重要的是,测试将使用什么“虚拟”标准?

我是否应该硬编码一个朋友的名字,假设它已经存在于数据库中?

但是,如果我将我的代码移动到一个新的环境中,有一个新的数据库呢?

或者,在执行每个测试之前,我应该编写代码手动将虚拟数据插入系统吗?

但是--这将是在测试框架内修改应用程序的内部状态,这似乎是一种糟糕的方法,因为我们应该把程序当作一个黑匣子,并且只通过一个接口来处理它。

或者,我是否会创建其他场景/测试,其中数据是使用程序的接口创建的?

例如,“功能:在我的列表中添加一个新朋友”。然后,我可以运行该测试,添加一个名为“露西”的用户,然后运行“搜索朋友”测试以搜索“露西”,该测试现在将存在于数据库中。

但是,那么我将在我的场景之间引入依赖关系,这与关于测试应该是独立运行的常见建议相矛盾。

哪一个是最好的策略?还是有更好的方法?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-05-12 11:32:09

您可以在场景中使用给定的子句,使系统处于测试的适当状态。实际的实现将隐藏在步骤定义中。

如果数据将在您的场景中共享,那么您可以在后台步骤中:

代码语言:javascript
复制
Background:
  Given I have the following friends:
    | andy smith   |
    | andy jones   |
    | andrew brown |

要添加这些朋友,可以直接将记录插入数据库:

代码语言:javascript
复制
def add_friend(name)
  Friend.create!(:name => name)
end

或使UI自动化,例如:

代码语言:javascript
复制
def add_friend(name)
  visit '/friends/new'
  fill_in 'Name', :with => name
  click_button 'Add'
end

对于场景本身,您需要考虑关键的示例来验证行为,例如:

代码语言:javascript
复制
Scenario: Searching for a existing person by first name
  When I search for 'andy'
  Then I should see the friends:
    | andy smith |
    | andy jones |
  But I should not see "andrew brown"

Scenario: Searching for a non-existing person by first name
  When I search for 'peter'
  Then I should not see any friends

测试应该是独立的,这是正确的,因此不应该依赖其他场景将数据库保持在特定的状态。您可能需要一些机制来清理后,每次测试。例如,如果您使用的是Cucumber和Rails,则使用“数据库清理器”gem。

票数 5
EN

Stack Overflow用户

发布于 2011-05-12 05:53:13

您指的是BDD和集成测试风格。如果你使用一个像样的ORM (NHibernate?)您可以在每次测试运行之前创建内存中的数据库,并在测试成功后清理它,而且由于db位于内存中,因此与在实际数据库上运行它相比,它不会花费太多时间。

您可以使用前/后测试挂钩来适应您的场景所需的数据,然后清理它,这样您的测试就可以不相互依赖地运行。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5973551

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档