我没有BDD的经验,但经过一些研究后,我发现它在我们的项目中非常有用。
我们的想法是开发人员希望为他们的单元测试创建BDD样式的测试(使用SpecFlow),我们的测试团队需要一些地方来进行自动化Web UI测试(使用Selenium)以及Web服务集成测试。
所以问题是:在测试人员和开发人员的测试之间共享相同的对象是否更好,或者将这两个世界分开可能会让我们感到困难,例如更好的测试管理?
对于我们的测试人员来说,SpecFlow似乎不是一个完美的解决方案(机器人框架或Fitnesse正在考虑中),但使用通用工具和库来编写不同类型的测试似乎是合理的。谢谢,
答案 0 :(得分:3)
我认为你会发现两个测试系统之间的重叠可能意味着分享的次数比预期的少。
首先让我们考虑BDD下的开发周期。我们从一个新的功能定义开始,然后开发一些场景和代码来支持它。实际上,如果我们正确地执行此操作,则每个Specflow场景都是业务级别测试,并且为了推动单个业务级别测试的开发,您还可能开发了许多较低级别的单元级别测试。我听说过这个过程被描述为各种各样的东西(包括“七步过程”),但重要的是它是一个循环周期,你完成多个Red Green Refactor单元测试循环才能通过业务级别周期将业务级别方案从红色变为绿色。
到目前为止,没有必要测试UI层,特别是如果我们在MVC / MVVM或类似的分层代码库中工作。事实上这就是我建议我的客户工作的方式,没有必要测试是否点击调用命令,我们假设我们不想浪费时间测试我们正在使用的框架,所以我们只需调用命令本身
但是你提到了Selenium,所以我假设你正在使用它来推动你与浏览器的交互,所以我们也假设你也希望在UI级别进行一些测试。此代码跨越多个域(请参阅Who's domain is it anyway)以提供高级概念,例如您现在要重用的登录和公共进程。此代码尚不存在,因为它与浏览器的交互不会与您的其他代码相关联。
所以我认为你会发现你最终得到了两个测试代码库,一个用于单元测试和业务级别规范来单独测试事物,即与Mocks一起保存的代码块或只是整个部分代码系统
另一个采用Selenium测试与完整系统的交互,用于集成测试和系统测试。
使用SpecFlow规范仍会为您提供一些非常好的东西,例如描述系统的常用语法,但如果您决定使用它,我认为它不会被绑定到相同的代码。