数据库清理验证测试与specflow

时间:2011-05-26 17:08:25

标签: database specflow acceptance-testing

我是tdd的新手。我看过Brandon Satrom的视频。我正在尝试实现像它们一样的测试,用于验收测试的外部循环和用于单元测试的内部循环。我认为验收测试也是对数据库的重复。所以我希望在Specflow中找到关于数据库清理的[BeginScenario / AfterScenario]事件的例子。据说它用于数据库清理。但我见过的所有例子都没有。

我是不是接受了验收测试的概念?它不包括数据库吗?我们应该像在单元测试中那样使用模拟对象吗?

3 个答案:

答案 0 :(得分:3)

我在集成单元测试(MSTest)中使用真正的MS SQL Server数据库,并以这种方式使用BDD工具SpecFlow进行验收测试:我将我的测试数据库(MDF / LDF文件)转储存储为模板。在测试初始化​​时,我将它们复制到临时位置,使用sp_attach_db存储过程将它们附加到专用SQL Server(您可以使用Express版本),然后运行我想要的任何测试代码,并在测试清理时分离测试数据库并删除MDF / LDF文件。整个复制/附加/分离/删除周期非常快(至少比我之前想象的要快得多)。 如果你有兴趣,我可以在我的博客上加上更多的话。

答案 1 :(得分:2)

最后我确信我必须在验收测试中使用真实数据库。我必须看到一些例子,并在我解释它之前从几个资源中读取它。

现在我正在使用接受测试来测试用户界面和数据库的流量。 我为我的注册页面写了一个快乐的路径scenerio来设计页面流。然后我写了一些测试逻辑,保存在我的数据库存储过程中。其他逻辑在控制器和模型类上。所以对他们来说我使用了单元测试。现在它对我来说更有意义,直到我对tdd :)的下一次困惑。

至于清理过程,我使用[BeginScenario / AfterScenario]事件。在BeginScenario中,我使用全局变量来保留DateTime.Now.Ticks值,并将其合并到我发送给db的值的beginnigs中。然后,当我在AfterScenario事件中为该场景进行清理时,我找到以此DateTime.Now.Ticks值开头的记录。所以它帮助我制作了不会干扰其他记录的独特价值观。它现在似乎有效。

答案 2 :(得分:1)

关于此事,this文章非常有帮助。

它描述了在MSDTC中使用事务,从BeginScenario开始并在AfterScenario上回滚。 (文章中未使用SpecFlow,但其概念相同)

我们目前正在中等规模的开发项目中成功使用这种技术。