我对BDD还很陌生,但是我发现它非常有趣并希望使用BDD开发我的下一个项目。在搜索和观看屏幕录制后,我仍然有很多关于BDD在实际中的问题。
1. 声明式或命令式的场景?
我看到的大多数given-when-then场景都是以UI(命令式)为基础编写的。
Scenario: Login
Given I am on the Login-page
When I enter 'AUser' in the textbox 'UserName'
And I enter 'APassword' in the textbox 'Password'
And I click the 'Login' button
Then I should see the following text 'You are logged in'
我发现这些测试非常脆弱,并且对于点击按钮的业务价值没有什么帮助。我认为它们很难维护。为什么大多数示例都使用命令式场景?
Scenario: Login (declarative)
Given I am not logged in
When I log in using valid credentials
Then I should be logged in
如果你更喜欢声明式的风格,那么如何描述像“主页”或“产品页面”这样的内容呢?
2. 是否运用UI进行练习?
大多数步骤实现都使用 WatiN、White 或其他类似工具来从用户角度实现场景。启动浏览器,点击按钮。我认为这些方法极其缓慢且易于破裂。好吧,我可以使用 Page 对象使测试不那么脆弱。但那又是一项额外的工作,特别是对于具有复杂 UI 的桌面应用程序。
在现实项目中如何实现场景 - 运用 UI 还是通过测试控制器/Presenter?
3. 使用真实数据库还是虚拟库?
当场景的 Given 部分被实现时,往往需要系统中有一些数据(例如,购物应用程序的某些商品)。那么你如何实现这个部分 - 将数据添加到真实数据库(完全端到端测试),还是向控制器提供存储库存根?
期待经验丰富的答案!
更新:问题上添加了有用的链接。