diff --git a/CHANGELOG.md b/CHANGELOG.md index 135c207e9..4854e9af8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ * Enhance BoDi error handling to provide the name of the interface being registered when that interface has already been resolved (#324) * Improve code-behind feature file compilation speed (#336) * Improve parameter type naming for generic types (#343) +* Add default registration for IReqnrollOutputHelper using Autofac (#357) * Reduced MsBuild log output and consistent use of [Reqnroll] prefix (#381) * Update behavior of `ObjectContainer.IsRegistered()` to check base container for registrations, to match `Resolve()` behavior (#367) @@ -15,7 +16,7 @@ * Fix: Support loading plugin dependencies from .deps.json on .NET Framework and Visual Studio MSBuild (#408) * Fix: Error with NUnit 4: "Only static OneTimeSetUp and OneTimeTearDown are allowed for InstancePerTestCase mode" (#379) -*Contributors of this release (in alphabetical order):* @clrudolphi, @gasparnagy, @obligaron, @olegKoshmeliuk, @SeanKilleen +*Contributors of this release (in alphabetical order):* @Antwane, @clrudolphi, @gasparnagy, @obligaron, @olegKoshmeliuk, @SeanKilleen # v2.2.1 - 2024-11-08 diff --git a/Plugins/Reqnroll.Autofac.ReqnrollPlugin/AutofacPlugin.cs b/Plugins/Reqnroll.Autofac.ReqnrollPlugin/AutofacPlugin.cs index eeb13ea9c..d15fbee68 100644 --- a/Plugins/Reqnroll.Autofac.ReqnrollPlugin/AutofacPlugin.cs +++ b/Plugins/Reqnroll.Autofac.ReqnrollPlugin/AutofacPlugin.cs @@ -179,5 +179,12 @@ private void RegisterReqnrollDependencies( var scenarioContext = reqnrollContainer.Resolve(); return scenarioContext; }).As(); + containerBuilder.Register( + ctx => + { + var reqnrollContainer = ctx.Resolve(); + var scenarioContext = reqnrollContainer.TestThreadContainer.Resolve(); + return scenarioContext; + }).As(); } } \ No newline at end of file diff --git a/Tests/Reqnroll.PluginTests/Autofac/AutofacPluginTests.cs b/Tests/Reqnroll.PluginTests/Autofac/AutofacPluginTests.cs index b82ad7fab..95bbd5c84 100644 --- a/Tests/Reqnroll.PluginTests/Autofac/AutofacPluginTests.cs +++ b/Tests/Reqnroll.PluginTests/Autofac/AutofacPluginTests.cs @@ -11,8 +11,10 @@ using Reqnroll.Autofac.ReqnrollPlugin; using Reqnroll.BoDi; using Reqnroll.Configuration; +using Reqnroll.Events; using Reqnroll.Infrastructure; using Reqnroll.Plugins; +using Reqnroll.Tracing; using Reqnroll.UnitTestProvider; using Xunit; @@ -106,7 +108,7 @@ public static void SetupScenarioContainer(global::Autofac.ContainerBuilder conta } } -private readonly RuntimePluginEvents _runtimePluginEvents; + private readonly RuntimePluginEvents _runtimePluginEvents; private readonly ObjectContainer _testRunContainer; private readonly ObjectContainer _testThreadContainer; private readonly ObjectContainer _featureContainer; @@ -304,4 +306,49 @@ public void Should_allow_using_existing_global_scope() var globalDep1 = resolver.ResolveBindingInstance(typeof(IGlobalDependency1), scenarioContainer); globalDep1.Should().NotBeNull(); } + + [Fact] + public void Should_register_IReqnrollOutputHelper() + { + // Arrange + var sut = new TestableAutofacPlugin(typeof(ContainerSetup1), + nameof(ContainerSetup1.SetupGlobalContainer), + nameof(ContainerSetup1.SetupScenarioContainer)); + + // Act + var scenarioContainer = InitializeToScenarioContainer(sut); + + var resolver = _testRunContainer.Resolve(); + + var testThreadContext = + new TestThreadContext(_testThreadContainer); + + _testThreadContainer.RegisterInstanceAs(testThreadContext); + + var traceListenerMock = + new Mock(); + var attachmentHandlerMock = + new Mock(); + var threadExecutionMock = + new Mock(); + + var defaultDenpendencyProvider = new DefaultDependencyProvider(); + defaultDenpendencyProvider + .RegisterTestThreadContainerDefaults(_testThreadContainer); + + _testThreadContainer + .RegisterInstanceAs(traceListenerMock.Object); + _testThreadContainer + .RegisterInstanceAs(attachmentHandlerMock.Object); + _testThreadContainer + .RegisterInstanceAs(threadExecutionMock.Object); + + // Assert + var resolvedOutputHelper = resolver + .ResolveBindingInstance(typeof(IReqnrollOutputHelper), scenarioContainer); + + resolvedOutputHelper + .Should() + .NotBeNull(); + } }