在我們的應用程序中,我需要打開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。 –