reqnroll / Reqnroll

Open-source Cucumber-style BDD test automation framework for .NET.
https://reqnroll.net
BSD 3-Clause "New" or "Revised" License
357 stars 37 forks source link

System.Collections.Generic.KeyNotFoundException : The given key 'Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceProviderEngineScope' was not present in the dictionary. #175

Open sanjeev-chevireddy opened 3 months ago

sanjeev-chevireddy commented 3 months ago

Reqnroll Version

2.0.2

Which test runner are you using?

NUnit

Test Runner Version Number

4.0.1

.NET Implementation

.NET 6.0

Test Execution Method

Visual Studio Test Explorer

Content of reqnroll.json configuration file

No response

Issue Description

System.Collections.Generic.KeyNotFoundException : The given key 'Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceProviderEngineScope' was not present in the dictionary. TearDown : System.Collections.Generic.KeyNotFoundException : The given key 'Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceProviderEngineScope' was not present in the dictionary.

Stack Trace:  ConcurrentDictionary2.ThrowKeyNotFoundException(TKey key) ConcurrentDictionary2.get_Item(TKey key) <>c.b__9_21(IServiceProvider sp) CallSiteRuntimeResolver.VisitFactory(FactoryCallSite factoryCallSite, RuntimeResolverContext context) CallSiteVisitor2.VisitCallSiteMain(ServiceCallSite callSite, TArgument argument) CallSiteRuntimeResolver.VisitDisposeCache(ServiceCallSite transientCallSite, RuntimeResolverContext context) CallSiteVisitor2.VisitCallSite(ServiceCallSite callSite, TArgument argument) CallSiteRuntimeResolver.VisitConstructor(ConstructorCallSite constructorCallSite, RuntimeResolverContext context) CallSiteVisitor`2.VisitCallSiteMain(ServiceCallSite callSite, TArgument argument) CallSiteRuntimeResolver.VisitRootCache(ServiceCallSite callSite, RuntimeResolverContext context)

<59 more frames...> TestExecutionEngine.FireEventsAsync(HookType hookType) TestExecutionEngine.FireScenarioEventsAsync(HookType bindingEvent) TestExecutionEngine.OnScenarioEndAsync() TestRunner.OnScenarioEndAsync() CreateClaimFeature.TestTearDownAsync() GenericAdapter`1.GetResult() AsyncToSyncAdapter.Await[TResult](Func`1 invoke) AsyncToSyncAdapter.Await(Func`1 invoke) SetUpTearDownItem.RunSetUpOrTearDownMethod(TestExecutionContext context, IMethodInfo method) SetUpTearDownItem.RunTearDown(TestExecutionContext context) ### Steps to Reproduce We are currently migrating from SpecFlow to ReQnRoll and have encountered the issue when running the tests after migrating from SolidToken.SpecFlow.DependencyInjection to Reqnroll.Microsoft.Extensions.DependencyInjection; Please see our Startup method as shown below using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Reqnroll.Microsoft.Extensions.DependencyInjection; [ScenarioDependencies] public static IServiceCollection ConfigureServices() { var configuration = new ConfigurationBuilder().AddJsonFile("appsettings.json").Build(); var connectionString = configuration["ConnectionString"]; IServiceCollection services = new ServiceCollection(); return services .AddSingleton(ConfigReader.GetBrowserSettingsData()) .AddSingleton(ConfigReader.GetAppSettingsData()) .AddSingleton() .AddSingleton() .AddSingleton() .AddSingleton() .AddSingleton() .AddSingleton() .AddSingleton() .AddSingleton() .AddSingleton() .AddSingleton(provider => { //Authorisation var client = GetCosmosClient(connectionString ); return new CosmosContainerFactory(client, "Claims"); }) } ### Link to Repro Project _No response_
gasparnagy commented 3 months ago

@mbhoek have you seen such error before?

mbhoek commented 3 months ago

@gasparnagy It's a duplicate of https://github.com/solidtoken/SpecFlow.DependencyInjection/issues/88

@sanjeev-chevireddy Can I ask you, from which version of the SpecFlow plugin are you migrating from?

ajeckmans commented 3 months ago

I actually encountered this in a project as well. I wrote it up to something we did wrong and since we were moving to using solely Bodi I ignored the issue.

sanjeev-chevireddy commented 3 months ago

@gasparnagy It's a duplicate of solidtoken/SpecFlow.DependencyInjection#88

@sanjeev-chevireddy Can I ask you, from which version of the SpecFlow plugin are you migrating from?

@mbhoek Specflow - 3.9.74, SolidToken.SpecFlow.DependencyInjection - 3.9.3

mbhoek commented 3 months ago

Hmm, that surprises me because I've only ever seen this problem in v3.9.3 of the SpecFlow plugin. I'll investigate.

mcraa commented 3 months ago

I encountered the same error earlier but had to make it work quickly so I changed back to the default container. Later I wanted to reproduce to open an issue, started with a new project and it was working fine. 🤷

That project was based on the playwright example from the docs. Of course, replacing Autofac with MS DI, and using newer versions of most packages.

I will try to switch in that project again to see if I can get back the error.

mcraa commented 3 months ago

@mbhoek In my case, one of my dependencies needed a ScenarioContext in the constructor (like in the example). BoDi has that automatically but it is not there in the MS DI container.

mbhoek commented 3 months ago

@mcraa Thanks that helps a lot! I'm trying to reproduce it in a unit test before solving it.