在进行验收测试和跟踪BDD时,您是断言数据库更改还是用户看到的内容?

时间:2011-03-11 00:57:40

标签: ruby-on-rails rspec bdd

我正在Ruby on Rails应用程序上使用Steak进行验收测试。想象一下,我想测试一个表单的功能。

  • 如果所有字段都正确,则应创建用户。
  • 如果任何字段不正确,则不应创建用户。

在第一种情况下,一条消息将通知用户已创建:'用户已创建'

在第二种情况下,错误消息将指示错误。

我可以根据显示的信息进行测试。也就是说,如果显示正确的消息,则第一次测试通过。

或者我可以根据数据库的变化进行测试。也就是说,如果数据库有一个包含输入数据的新用户,则第一次测试通过。

或者我可以断言这两个条件,数据库应该更改并显示相应的消息。

根据行为驱动开发,这种行为的概念适当的方法是什么?

根据实用程序员的说法,测试这种行为的实用方法是什么?

3 个答案:

答案 0 :(得分:4)

通常,请保持用户看到的内容。

但是,有时候信息的用户不止一个。也许,一旦数据到达数据库,另一个应用程序就会使用这些数据(对内部项目来说非常典型!)

如果无法将两个应用程序一起自动化,那么断言数据库的内容,或者验证RESTful URL上的资源,都是一个很好的方法。

如果您这样做,它可能会改变您的方案的性质。而不是说Then the database should contain XYZ,尝试类似:

Given that Fred Brown lives at 25 Warrington Grove, Springfield
When Fred orders a deckchair
Then the warehouse should receive an order:
    Deckchair
    Quantity: 1
    To: Fred Brown
    25 Warrington Grove
    Springfield

因此,您始终在关注系统的功能,而不仅仅是数据 - 即使仓库在您的方案中没有真正收到它,您也会显示为什么数据必须在那个特定的地方和形式。

这样,您也可以选择使用真实用户界面或RESTful URL等 - 该步骤与您选择的实施无关。

答案 1 :(得分:3)

我的BDD实践涉及使用Cucumber。我尽最大努力保持用户看到的内容。也就是说,任何WhenThen语句都应反映用户输入或用户视觉效果。

在你的情况下,我会确保之后出现成功消息,然后我会(如果可能的话)在屏幕上查找指示应用程序知道该对象的数据。例如,如果您在博文中添加评论,则应填写帖子,点击“接受”按钮,查看“已发布消息”成功消息,然后在页面上将您的内容视为新帖子。< / p>

您应该使用单元和有时控制器测试来备份用户驱动的BDD测试,以确保幕后的所有内容都能正常运行。

我倾向于使用RSpec并验证事情是否已添加到数据库中,方法正在返回预期结果等。但我也使用Cucumber确保用户看到用户期望看到的内容(但我并不是真的让黄瓜关心数据库中的内容。

我希望这会有所帮助。如果您不使用黄瓜,我强烈推荐它与RSpec一起进行BDD测试。你应该查看这本书(以电子PDF格式提供) - 我从那开始,它通过我的测试实践帮助

http://www.pragprog.com/titles/achbd/the-rspec-book

答案 2 :(得分:0)

我同意保持用户看到的内容,直到某一点。

如果有某种层可能会在内存中保留一个值,那么它可能会在网站上显示,就好像它在数据库中一样,当它实际上没有被写到数据库中时...那么它使用db级别的一些检查来备份“用户看到的内容”可能是一个好主意。