暂停测试执行时执行自定义方法

时间:2014-06-04 07:55:50

标签: unit-testing visual-studio-2013 mstest specflow

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

我们使用Specflow并实现我们的目标,即如果未停止测试执行,则使用此工具可以保持数据库清理。但是,在开发过程中,测试用例发生时,测试执行停止,因此数据库中生成的数据不会被清除。

问题出现了当我按下VS 2013中的“停止执行”时会发生什么? VS如何停止执行?会叫什么方法?可以自定义吗?

specflow使用MSTest框架,没有选项可以更改它。

1 个答案:

答案 0 :(得分:0)

我不知道这对你有多实用,但正如我所看到的,你有几个选择:

  • 在测试的开始和结束时运行清理代码
  • 为每个测试创建一个新数据库

第一个是最简单的,并且将确保当您在VS中停止执行时,它不会影响下一次测试运行(同一测试),因为在测试运行时将清除任何剩余数据。

第二个设置更复杂(运行时更慢),但意味着您可以并行运行测试(如果使用像NCrunch这样的工具,这样做很好),并且它们不会干扰每个其他

我过去所做的就是让数据库层可以切换,这样你就可以在大部分时间内在内存数据中运行测试,然后偶尔切换到数据库来检查实际的读写内容没有被打破

如果您使用EF6并且可以将IDBSet<T>切换为内存IQueryable<>实现支持的其他实现

,这不会太繁琐