【问题标题】:Exeute custom method when the test execution is halted测试执行停止时执行自定义方法
【发布时间】:2014-07-24 18:42:48
【问题描述】:

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

如果测试执行没有停止,我们使用 Specflow 并通过使用此工具来实现保持数据库清洁的目标。但是,在开发测试用例的过程中,测试执行会停止,因此不会清理数据库中生成的数据。

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

specflow 使用 MSTest 框架,无法更改。

【问题讨论】:

  • 您目前如何清理数据库?您是否使用 SpecFlow 挂钩(例如 AfterScenario)来执行数据库清理代码?
  • @Fresh,是的,没错。
  • 当您停止执行时,应用程序将被卸载。 (类似于taskkill /im app.exe /f)此时无法进行进一步的交互。

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


【解决方案1】:

我不知道这对你来说有多实用,但我认为你有几个选择:

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

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

第二个设置起来更复杂(运行时速度更慢),但这意味着您可以并行运行测试(如果您使用像 NCrunch 这样的工具则很好),并且它们不会相互干扰。

我过去所做的是使 DB 层可切换,这样您就可以在大多数时间对内存中的数据运行测试,然后偶尔切换到 DB 以检查实际的读写内容没坏

如果您使用 EF6 并可以将 IDBSet<T> 切换为由内存中 IQueryable<> 实现支持的其他实现,这不会太繁琐

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-05
    • 2013-04-03
    • 1970-01-01
    • 1970-01-01
    • 2021-07-01
    • 2021-03-02
    • 2016-07-14
    相关资源
    最近更新 更多