在使用specflow的验收测试中清理数据库

| 我是tdd的新手。我看过布兰登·萨特罗姆(Brandon Satrom)的视频。我正在尝试实现像它们这样的测试,用于验收测试的外循环和用于单元测试的内循环。我本来以为接受测试也是对Database的重做。所以我希望在Specflow中找到有关[BeginScenario / AfterScenario]事件的示例,以进行数据库清理。据说该事件用于数据库清理。但是我所见的例子都没有。 我会误解验收测试的概念吗?它也不涵盖数据库吗?我们是否应该像在单元测试中那样使用模拟对象?     
已邀请:
我以这种方式在集成单元测试(MSTest)和BDD工具SpecFlow的验收测试中使用了真实的MS SQL Server数据库:我将测试数据库(MDF / LDF文件)的转储存储为模板。在测试初始化​​时,我将它们复制到一个临时位置,使用sp_attach_db存储过程将它们附加到专用的SQL Server(您可以为此使用Express版本),然后运行所需的任何测试代码,并在测试清理时分离测试数据库并删除MDF / LDF文件。整个复制/附加/分离/删除周期非常快(至少比我以前想象的要快得多)。 如果您有兴趣,我可以在我的博客上再加上一些文字。     
最后,我确信我必须在验收测试中使用真实的数据库。我必须先看一些示例,并从一些资源中阅读该示例,然后再将其付诸实践。 现在,我正在按预期的方式使用验收测试来测试用户界面和数据库的流程。 我为我的注册页面写了一条快乐的路Scenerio,以设计页面流程。然后我写了一些逻辑测试,这些测试保留在数据库的存储过程中。其他逻辑涉及控制器和模型类。因此,对于他们,我使用了单元测试。现在对我来说更有意义,直到我对tdd :)的下一个困惑为止。 至于清理过程,我使用[BeginScenario / AfterScenario]事件。在BeginScenario中,我使用全局变量来保留DateTime.Now.Ticks值,并将其合并到我发送到db的值的beginnigs中。然后,在AfterScenario事件中对该场景进行清理时,我会找到以该DateTime.Now.Ticks值开头的记录。因此,它帮助我做出了不干扰其他记录的独特价值。到目前为止,它似乎可以正常工作。     
关于这个问题,本文非常有帮助。 它描述了MSDTC中事务的使用,从BeginScenario开始,然后在AfterScenario回滚。 (本文中未使用SpecFlow,但其概念相同) 我们目前正在中型开发项目中成功使用该技术。     

要回复问题请先登录注册