Внедрение нескольких объектов в контейнер объектов

Я пытаюсь внедрить ExtentReports в свой набор тестов, и у меня есть некоторые проблемы с внедрением контекста, я пытаюсь внедрить класс отчетов в свой контейнер объектов вместе с моим IWebDriver, но я получаю сообщение об ошибке. «Статический метод доступа ScenarioContext.Current нельзя использовать в многопоточном исполнении. Это меня чертовски раздражает, может ли кто-нибудь увидеть, где я ошибаюсь?

вот фрагмент класса хуков

   class Hooks : ReportingStepDefinitions
{

    private readonly IObjectContainer _objectContainer;
    private TestReports _report; 
    private IWebDriver _driver;



    public Hooks (IObjectContainer objectContainer)
    {
        _objectContainer = objectContainer;      
    }   

    [BeforeScenario]
    public void initialise()
    {  
        _report = new TestReports();
        _report.startTest();
        _driver = new ChromeDriver(@"C:\\TestData\Dependencies")
        _objectContainer.RegisterInstanceAs<IWebDriver>(_driver);
        _objectContainer.RegisterInstanceAs<TestReports>(_report);
}

я не включал близкие заявления, так как я уверен, что проблема именно в этом... вся помощь приветствуется

Редактирование для включения трассировки стека

Result StackTrace:  
Server stack trace: 
   at SpecResults.ReportingAspect.ReportingMessageSink.<>c__DisplayClass1.<SyncProcessMessage>b__0()

Exception rethrown at [0]: 
   at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
   at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
   at OCCSpecFlow.Hooks.initialise()
   at lambda_method(Closure , IContextManager )
   at TechTalk.SpecFlow.Bindings.BindingInvoker.InvokeBinding(IBinding binding, IContextManager contextManager, Object[] arguments, ITestTracer testTracer, TimeSpan& duration)
   at TechTalk.SpecFlow.Infrastructure.TestExecutionEngine.FireEvents(HookType bindingEvent)
   at TechTalk.SpecFlow.Infrastructure.TestExecutionEngine.OnScenarioStart(ScenarioInfo scenarioInfo)
   at TechTalk.SpecFlow.TestRunner.OnScenarioStart(ScenarioInfo scenarioInfo)
   at SpecFlowAutomation.FeatureFiles.HomepageFeature.ScenarioSetup(ScenarioInfo scenarioInfo)
   at SpecFlowAutomation.FeatureFiles.HomepageFeature.ViewingTheHomepageJumps() in C:\Source\dev\AutomationFramework\SpecFlowAutomation\FeatureFiles\HomePage.feature:line 10
--TearDown

Server stack trace: 
   at SpecResults.ReportingAspect.ReportingMessageSink.<>c__DisplayClass1.<SyncProcessMessage>b__0()

Exception rethrown at [0]: 
   at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
   at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
   at OCCSpecFlow.Hooks.cleanup()
   at lambda_method(Closure , IContextManager )
   at TechTalk.SpecFlow.Bindings.BindingInvoker.InvokeBinding(IBinding binding, IContextManager contextManager, Object[] arguments, ITestTracer testTracer, TimeSpan& duration)
   at TechTalk.SpecFlow.Infrastructure.TestExecutionEngine.FireEvents(HookType bindingEvent)
   at TechTalk.SpecFlow.Infrastructure.TestExecutionEngine.OnScenarioEnd()
   at TechTalk.SpecFlow.TestRunner.OnScenarioEnd()
   at SpecFlowAutomation.FeatureFiles.HomepageFeature.ScenarioTearDown()
Result Message: 
TechTalk.SpecFlow.SpecFlowException : The ScenarioContext.Current static accessor cannot be used in multi-threaded execution. Try injecting the scenario context to the binding class. See http://go.specflow.org/doc-multithreaded for details.
TearDown : System.NullReferenceException : Object reference not set to an instance of an object.

person Bithellio    schedule 06.02.2017    source источник
comment
где происходит проблема? это не похоже на его нигде в предоставленном коде...   -  person Sam Holder    schedule 06.02.2017
comment
У меня также есть сами тесты, которые реализуют это, вызывая элемент в конструкторе, например Class test { private readonly IWebDriver _driver; приватный TestReports только для чтения _report; общедоступный тест (драйвер IWebDriver, отчет TestReports) { _driver = driver; _отчет = отчет; }   -  person Bithellio    schedule 06.02.2017
comment
когда на самом деле запускают тесты параллельно, кажется, что проблема возникает, поэтому она работает последовательно, без проблем.   -  person Bithellio    schedule 06.02.2017
comment
хорошо, но какая строка кода выше вызывает исключение?   -  person Sam Holder    schedule 06.02.2017
comment
Я не получаю конкретной строки, так как когда я отлаживаю, она работает нормально, только когда я запускаю параллельно, и кажется, что тест не пытается запуститься, так как он терпит неудачу через 78 мс, а тест в среднем составляет около 30 секунд каждый. создание обоснованного предположения id предполагает его во время инициализации класса хуков   -  person Bithellio    schedule 06.02.2017
comment
пожалуйста, опубликуйте трассировку стека, затем   -  person Sam Holder    schedule 06.02.2017
comment
добавил к вопросу   -  person Bithellio    schedule 06.02.2017
comment
также добавьте код из C:\Source\dev\AutomationFramework\SpecFlowAutomation\FeatureFiles\HomePage.feature:строка 10. Вот где ваша проблема.   -  person Sam Holder    schedule 06.02.2017
comment
Это файл функций. в нем нет кода, только сценарии корнишонов   -  person Bithellio    schedule 06.02.2017
comment
какой шаг связан в этой точке?   -  person Sam Holder    schedule 06.02.2017
comment
строка 10 — это заголовок сценария, поэтому сценарий: просмотр переходов на домашнюю страницу   -  person Bithellio    schedule 06.02.2017
comment
хорошо спасибо. И если вы удалите строки, связанные с objectContainer, он снова начнет работать (или, по крайней мере, пройдет этот момент)?   -  person Sam Holder    schedule 06.02.2017
comment
Если я удалю все ссылки на класс отчетов, он будет работать (даже с классом IwebDriver)   -  person Bithellio    schedule 06.02.2017
comment
так что в вашем классе отчетов?   -  person Sam Holder    schedule 06.02.2017
comment
Вы где-нибудь используете ScenarioContext.Current?   -  person Sam Holder    schedule 06.02.2017
comment
класс отчетов прост и не использует ScenarioContext.Current, поскольку этот метод должен свести на нет необходимость в нем (по крайней мере, для того, что мне нужно)   -  person Bithellio    schedule 06.02.2017


Ответы (1)


Обнаружено, что ответ был вызван тем, что у specflow возникла небольшая икота, когда я попытался использовать это поверх своего собственного контейнера ScenarioContext. после перемещения контейнера объектов и возвращения в контекст сценария все заработало.

person Bithellio    schedule 22.11.2019