1

我没有使用 BDD 的经验,但经过一些研究,我发现它在我们的项目中非常有用。

这个想法是开发人员希望为他们的单元测试创​​建 BDD 样式的测试(使用 SpecFlow),我们的测试团队需要一些地方来放置自动化的 Web UI 测试(使用 Selenium)以及 Web 服务集成测试。

所以问题是:在测试人员和开发人员的测试之间共享相同的对象是否更好,或者将这两个世界分开可以让我们更好地进行测试管理?

SpecFlow 似乎不是我们的测试人员的完美解决方案(正在考虑机器人框架或 Fitnesse),但使用通用工具和库来编写不同类型的测试似乎是合理的。

谢谢,

4

1 回答 1

3

我认为您会发现两个测试系统之间的重叠可能意味着共享的内容比您预期的要少。

首先让我们考虑一下 BDD 下的开发周期。我们从一个新的特性定义开始,然后开发一些场景和代码来支持它。事实上,如果我们这样做得当,每个 Specflow 场景都是一个业务级别测试,为了推动该单一业务级别测试的开发,您可能还开发了许多较低级别的单元级别测试。我听说这个过程被描述为各种各样的事情(包括“七步过程”),但重要的是它是一个循环中的一个循环,您完成多个Red Green Refactor单元测试周期以通过业务级别循环将业务级别场景从红色变为绿色。

到目前为止,还没有必要测试 UI 层,特别是如果我们在 MVC/MVVM 或类似的分层代码库中工作。其实这就是我建议我的客户工作的方式,不需要测试点击是否调用命令,我们假设我们不想浪费时间测试我们正在工作的框架,所以我们只是调用命令本身.

但是您提到 Selenium,所以我假设您正在使用它来驱动您与浏览器的交互,因此我们还假设您也想在 UI 级别进行一些测试。此代码跨越多个域(请参阅Who's domain is it anyway)为您提供高级概念,例如您现在想要重用的登录和常用流程。此代码尚不存在,因为它与浏览器的交互与您的其他代码无关。

所以我想你会发现你最终会得到两个测试代码库,一个用于单元测试和业务级别规范以单独测试事物,即与 Mocks 或整个系统的一部分一起保存的代码块。

另一个包含 Selenium 测试与完整系统的交互,它用于集成测试和系统测试。

使用 SpecFlow 规范仍然会给你一些非常好的东西,比如描述你的系统的通用语法,但是如果你决定使用它,我认为它不会被绑定到相同的代码。

于 2012-11-01T20:03:18.310 回答