Unit testing 当测试执行停止时执行自定义方法

Unit testing 当测试执行停止时执行自定义方法,unit-testing,visual-studio-2013,mstest,specflow,Unit Testing,Visual Studio 2013,Mstest,Specflow,我们的情况是,用作测试环境db的数据库必须保持干净。这意味着每个测试都有一个清理方法,该方法将在每次执行时从数据库中删除测试所需的所有数据后运行 我们使用Specflow,为了实现保持数据库干净的目标,如果测试执行没有停止,则可以使用该工具访问数据库。但是,在开发测试用例的过程中,测试执行会暂停,因此数据库中生成的数据不会被清除 问题是,当我在VS 2013中按下“暂停执行”按钮时会发生什么?VS如何停止执行?将调用什么方法?可以定制吗 specflow使用MSTest框架,没有修改的选项。我不

我们的情况是,用作测试环境db的数据库必须保持干净。这意味着每个测试都有一个清理方法,该方法将在每次执行时从数据库中删除测试所需的所有数据后运行

我们使用Specflow,为了实现保持数据库干净的目标,如果测试执行没有停止,则可以使用该工具访问数据库。但是,在开发测试用例的过程中,测试执行会暂停,因此数据库中生成的数据不会被清除

问题是,当我在VS 2013中按下“暂停执行”按钮时会发生什么?VS如何停止执行?将调用什么方法?可以定制吗


specflow使用MSTest框架,没有修改的选项。

我不知道这对您有多实际,但在我看来,您有两个选择:

  • 在测试开始和结束时运行清理代码
  • 为每个测试创建一个新数据库
第一个是最简单的,它将确保在VS中停止执行时不会影响下一次测试运行(同一测试),因为测试运行时会清除任何剩余数据

第二种设置更复杂(运行时更慢),但这意味着您可以并行运行测试(如果您使用NCrunch之类的工具也很好),并且它们不会相互干扰

我过去所做的是使DB层可切换,这样您可以在大部分时间对内存中的数据运行测试,然后每隔一段时间切换到DB以检查实际的读写内容是否被破坏


如果您使用EF6,并且可以将
IDBSet
切换到由内存
iQuery实现支持的其他实现,那么这不会太麻烦
当前如何清理数据库?您是否使用SpecFlow钩子(例如AfterScenario)来执行DB清理代码?@Fresh,是的,这是正确的。当您停止执行时,应用程序将被卸载。(类似于
taskkill/im app.exe/f
)此时无法进行进一步的交互。