在我们的应用程序中,我需要打开3个完全相同的文档,对于每个文档我有一个带有唯一定位器的按钮,因为我们正在并行执行测试,我需要知道哪个文档已经打开并打开另一个文档没有使用,我无法并行打开一个文档。我的场景应共享打开哪个文档的状态以及哪些文档可供编辑。是否有可能在不同场景之间共享这些数据?在specflow场景之间共享数据
我检查了所有可能的东西IObjectContainer
并创建了GlobalContainer
使用var Container = new ContainerBuilder().CreateGlobalContainer();
,但没有任何效果。
UPDATE:
解决方案已经发现,我们应该通过TestThreadContext到钩构造,但这只会工作,如果我们将使用一个线程:
private readonly TestThreadContext _context;
private Hooks(ScenarioContext scenarioContext, TestThreadContext context)
{
ScenarioContext = scenarioContext;
_context = context;
if (!_context.TestThreadContainer.IsRegistered<Dictionary<int, bool>>("myObject"))
_context.TestThreadContainer.RegisterInstanceAs(MyDictionary, "myObject"); // you can register any object not only dictionary.
}
[BeforeScenario]
private void BeforeScenario()
{
var myDictionary = _context.TestThreadContainer.Resolve<Dictionary<int, bool>>("myObject"); // to get your dictionary back from container
}
如果你想与大家分享在并行测试场景之间的数据,你应该在GlobalStep(SpecRun)中创建新的AppDomain,然后将数据和方法传递给这个应用程序域,这些数据和方法可以返回数据和更新数据,这可以使用yourDomain.SetData("youKey", new yourClass)
完成,然后在Hooks中,域(how to get required app domain),并从域名获得您添加的类var data = domain.GetData("yourKey")
,然后您可以调用您的方法data.YourMethod();
也应该使用lock(object) {your code}
锁定方法内的线程安全线程安全。
因为我们无法订购测试场景,所以有时候这个文件会打开两次, ID。 –