我必须在测试执行之前和之后运行数据库脚本,但是如果我在测试运行之前提到它为每个线程运行多次,但我只需要在测试执行中运行一次意味着它是所有线程的顶部
例如: 钩子文件
[BeforeTestRun]
public static void BeforeTestrun()
{
Console.WriteLine("run before test");
}
[AfterTestRun]
public static void AfterTestrun()
{
Console.WriteLine("run after test");
}
在 Default.srprofile 中 线程数=3
当运行构建时,它像这样显示
- 线程 0:"测试前运行">
- 线程 1:"测试前运行">
- 线程 2:"在测试前运行">
- 线程 0:"测试后运行">
- 线程 1:"测试后运行"
- 线程 2:"测试后运行">
但是我只需要在所有线程上方和所有线程之后运行一次
如果您使用的是 SpecFlow+Runner,测试线程隔离模式为Process
或AppDomain
执行BeforeTestRun
和AfterTestRun
钩子将针对每个线程发生。
这是预期行为。原因是这些隔离模式下线程之间的内存隔离。
若要在整个测试运行中仅执行一次某些操作,则必须使用自己的部署步骤。这里有一个例子:https://github.com/SpecFlowOSS/SpecFlow.Plus.Examples/tree/master/CustomDeploymentSteps
如果其他测试运行程序或SharedAppDomain
中发生这种情况,请在 GitHub 上打开问题。
完全披露:我是SpecFlow和SpecFlow+的开发人员之一。