如何在Specflow 3.0 [BeforeTestRun]静态挂钩中访问TestContext

时间:2019-10-12 12:53:02

标签: testing mstest bdd specflow testcontext

我已经开始将Specflow 3.0用于带有内置MSTest运行器的.NET核心测试项目。

我尝试设置一次性方法执行以为Specflow中所有正在运行的测试保留承载令牌值时遇到问题。

所以我的想法是创建[BeforeTestRun] Hook静态方法,该方法将使用给定的凭据发出HTTP请求。问题在于这些凭据存储在.runsettings文件中,因此我需要具有MSTest的TestContext对象才能访问字典属性。

在方案的情况下,我正在注入TestContext,并且工作正常,但是我不知道如何在静态[BeforeTestRun]方法中访问此对象。是否有机会自己创建此对象并存储在静态属性中?

TestContext class

如您所见,这是抽象类,所以我猜想Test Framework会自动在具有DI的Scanarios中注入具体实现。我怎样才能得到这个具体的实现?

如果不存在解决方案,您是否会建议另一种方法,除了.runsettings之外,我还可以如何存储可配置设置,以便可以在没有DI的静态[BeforeTestRun]方法中访问它们?

谢谢

1 个答案:

答案 0 :(得分:1)

AFAIK我知道MSTest中TestContext的行为,对于您自己的TestContext实例的每个测试,您都会得到普通的MSTest。
因此,您无法获得整个测试运行的实例。

您可以做的是,在要执行的第一个方案的BeforeScenario挂钩中执行HTTP请求。在那里,您可以毫无问题地进入TestContext实例。