Exemple #1
0
 /// <summary>
 /// Custom SpecFlow plugin taking care of automatically reporting SpecFlow scenario information to TestProject.
 /// </summary>
 /// <param name="runtimePluginEvents">Runtime plugin events.</param>
 /// <param name="runtimePluginParameters">Parameters for the runtime plugin events.</param>
 /// <param name="unitTestProviderConfiguration">Unit test provider configuration.</param>
 public void Initialize(
     RuntimePluginEvents runtimePluginEvents,
     RuntimePluginParameters runtimePluginParameters,
     UnitTestProviderConfiguration unitTestProviderConfiguration)
 {
     runtimePluginEvents.CustomizeGlobalDependencies += this.RuntimePluginEvents_CustomizeGlobalDependencies;
 }
Exemple #2
0
 public void Initialize(RuntimePluginEvents runtimePluginEvents, RuntimePluginParameters runtimePluginParameters, UnitTestProviderConfiguration unitTestProviderConfiguration)
 {
     runtimePluginEvents.RegisterGlobalDependencies += (sender, args) =>
     {
         args.ObjectContainer.RegisterTypeAs <CustomBindingFactory, IBindingFactory>();
     };
 }
        public void Initialize(RuntimePluginEvents runtimePluginEvents, RuntimePluginParameters runtimePluginParameters, UnitTestProviderConfiguration unitTestProviderConfiguration)
        {
            runtimePluginEvents.CustomizeGlobalDependencies += (sender, args) =>
            {
                if (!args.ObjectContainer.IsRegistered <IServiceCollectionFinder>())
                {
                    lock (registrationLock)
                    {
                        if (!args.ObjectContainer.IsRegistered <IServiceCollectionFinder>())
                        {
                            args.ObjectContainer.RegisterTypeAs <DependencyInjectionTestObjectResolver, ITestObjectResolver>();
                            args.ObjectContainer.RegisterTypeAs <ServiceCollectionFinder, IServiceCollectionFinder>();
                        }
                    }
                    args.ObjectContainer.Resolve <IServiceCollectionFinder>();
                }
            };

            runtimePluginEvents.CustomizeScenarioDependencies += (sender, args) =>
            {
                args.ObjectContainer.RegisterFactoryAs <IServiceProvider>(() =>
                {
                    var serviceCollectionFinder         = args.ObjectContainer.Resolve <IServiceCollectionFinder>();
                    var createScenarioServiceCollection = serviceCollectionFinder.GetCreateScenarioServiceCollection();
                    var services = createScenarioServiceCollection();
                    RegisterSpecFlowDependencies(args.ObjectContainer, services);
                    return(services.BuildServiceProvider());
                });
            };
        }
 public void Initialize(RuntimePluginEvents runtimePluginEvents, RuntimePluginParameters runtimePluginParameters, UnitTestProviderConfiguration unitTestProviderConfiguration)
 {
     runtimePluginEvents.RegisterGlobalDependencies    += RuntimePluginEventsOnRegisterGlobalDependencies;
     runtimePluginEvents.CustomizeGlobalDependencies   += RuntimePluginEvents_CustomizeGlobalDependencies;
     runtimePluginEvents.CustomizeScenarioDependencies += RuntimePluginEvents_CustomizeScenarioDependencies;
     unitTestProviderConfiguration.UseUnitTestProvider("nunit");
 }
        public void Initialize(RuntimePluginEvents runtimePluginEvents, RuntimePluginParameters runtimePluginParameters)
        {
            runtimePluginEvents.CustomizeGlobalDependencies += (sender, args) =>
            {
                // temporary fix for CustomizeGlobalDependencies called multiple times
                // see https://github.com/techtalk/SpecFlow/issues/948
                if (!args.ObjectContainer.IsRegistered <IContainerBuilderFinder>())
                {
                    args.ObjectContainer.RegisterTypeAs <AutofacTestObjectResolver, ITestObjectResolver>();
                    args.ObjectContainer.RegisterTypeAs <ContainerBuilderFinder, IContainerBuilderFinder>();

                    // workaround for parallel execution issue - this should be rather a feature in BoDi?
                    args.ObjectContainer.Resolve <IContainerBuilderFinder>();
                }
            };

            runtimePluginEvents.CustomizeScenarioDependencies += (sender, args) =>
            {
                args.ObjectContainer.RegisterFactoryAs <IComponentContext>(() =>
                {
                    var containerBuilderFinder         = args.ObjectContainer.Resolve <IContainerBuilderFinder>();
                    var createScenarioContainerBuilder = containerBuilderFinder.GetCreateScenarioContainerBuilder();
                    var containerBuilder = createScenarioContainerBuilder();
                    var container        = containerBuilder.Build();
                    return(container.BeginLifetimeScope());
                });
            };
        }
Exemple #6
0
 public void Initialize(
     RuntimePluginEvents runtimePluginEvents,
     RuntimePluginParameters runtimePluginParameters,
     UnitTestProviderConfiguration unitTestProviderConfiguration)
 {
     runtimePluginEvents.CustomizeScenarioDependencies += (sender, args) => RegisterRuntimeDependencies(args.ObjectContainer);
 }
Exemple #7
0
        public void Feature_contexts_persist_across_scenarios()
        {
            var plugin = new WindsorPlugin();
            var events = new RuntimePluginEvents();

            var globalContainer    = new ObjectContainer();
            var featureContainer   = new ObjectContainer(globalContainer);
            var scenarioContainer1 = new ObjectContainer(featureContainer);
            var scenarioContainer2 = new ObjectContainer(featureContainer);

            var context = new FeatureContext(featureContainer, new FeatureInfo(CultureInfo.CurrentCulture, "", "", ""), ConfigurationLoader.GetDefault());

            globalContainer.RegisterInstanceAs <IContainerFinder>(new SpecificContainerFinder(() => new WindsorContainer()));
            featureContainer.RegisterInstanceAs(context);

            plugin.Initialize(events, null, null);
            events.RaiseCustomizeGlobalDependencies(globalContainer, null);
            events.RaiseCustomizeFeatureDependencies(featureContainer);
            events.RaiseCustomizeScenarioDependencies(scenarioContainer1);
            var context1 = scenarioContainer1.Resolve <IWindsorContainer>().Resolve <FeatureContext>();

            events.RaiseCustomizeScenarioDependencies(scenarioContainer2);
            var context2 = scenarioContainer2.Resolve <IWindsorContainer>().Resolve <FeatureContext>();

            context2.Should().BeSameAs(context1);
        }
 public void Initialize(RuntimePluginEvents runtimePluginEvents, RuntimePluginParameters runtimePluginParameters)
 {
     runtimePluginEvents.CustomizeTestThreadDependencies += (sender, args) =>
     {
         args.ObjectContainer.RegisterTypeAs <TestRunner, ITestRunner>();
     };
 }
Exemple #9
0
 public void Initialize(RuntimePluginEvents runtimePluginEvents, RuntimePluginParameters runtimePluginParameters)
 {
     ReporterManager.Initialize(TestingFramework.SpecFlow, new GhprSpecFlowTestDataProvider());
     var specFlowHelper = new GhprSpecFlowHelper();
     GhprPluginHelper.Init(specFlowHelper);
     runtimePluginEvents.CustomizeTestThreadDependencies += CustomizeTestThreadDependencies;
 }
        public void Initialize(RuntimePluginEvents runtimePluginEvents, RuntimePluginParameters runtimePluginParameters)
        {
            // Wire up our Windsor resolver & container locater to the
            // global IOC container
            runtimePluginEvents.CustomizeGlobalDependencies += (sender, args) =>
            {
                // temporary fix for CustomizeGlobalDependencies called multiple times
                // see https://github.com/techtalk/SpecFlow/issues/948
                if (args.ObjectContainer.IsRegistered <IContainerFinder>())
                {
                    return;
                }
                args.ObjectContainer.RegisterTypeAs <WindsorResolver, ITestObjectResolver>();
                args.ObjectContainer.RegisterTypeAs <ContainerFinder, IContainerFinder>();
            };

            // Replace the IOC container with our windsor container
            // which is defined in a method marked with the [ScenarioDependecies] Attribute
            runtimePluginEvents.CustomizeScenarioDependencies += (sender, args) =>
            {
                args.ObjectContainer.RegisterFactoryAs(() =>
                {
                    var containerBuilderFinder = args.ObjectContainer.Resolve <IContainerFinder>();
                    var containerBuilder       = containerBuilderFinder.GetCreateScenarioContainer();
                    var container = containerBuilder.Invoke();
                    return(container);
                });
            };
        }
Exemple #11
0
 public void Initialize(RuntimePluginEvents runtimePluginEvents, RuntimePluginParameters runtimePluginParameters)
 {
     runtimePluginEvents.RegisterGlobalDependencies += (sender, args) =>
                                                       args.ObjectContainer.RegisterInstanceAs <IUnitTestRuntimeProvider>(new NUnitRuntimeProvider(),
                                                                                                                          "Unickq.SpecFlow.Selenium.Allure");
     runtimePluginEvents.CustomizeTestThreadDependencies += (sender, args) =>
                                                            args.ObjectContainer.RegisterTypeAs <AllureTestTracerWrapper, ITestTracer>();
 }
Exemple #12
0
        public void Initialize(RuntimePluginEvents runtimePluginEvents, RuntimePluginParameters runtimePluginParameters)
        {
            runtimePluginEvents.CustomizeGlobalDependencies += (sender, args) =>
                                                               args.ObjectContainer.RegisterTypeAs <AllureBindingInvoker, IBindingInvoker>();

            runtimePluginEvents.CustomizeTestThreadDependencies += (sender, args) =>
                                                                   args.ObjectContainer.RegisterTypeAs <AllureTestTracerWrapper, ITestTracer>();
        }
Exemple #13
0
 public void Initialize(RuntimePluginEvents runtimePluginEvents, RuntimePluginParameters runtimePluginParameters,
                        UnitTestProviderConfiguration unitTestProviderConfiguration)
 {
     runtimePluginEvents.CustomizeTestThreadDependencies += (sender, e) =>
     {
         e.ObjectContainer.RegisterTypeAs <OctaneGherkinReportAddIn, ITestTracer>();
     };
 }
        public void Initialize(RuntimePluginEvents runtimePluginEvents, RuntimePluginParameters runtimePluginParameters, UnitTestProviderConfiguration unitTestProviderConfiguration)
        {
            // Wire-up Windsor resolver and container locator to the global IOC container
            runtimePluginEvents.CustomizeGlobalDependencies += RuntimePluginEvents_CustomizeGlobalDependencies;

            // Replace the global IOC container without windsor container
            // which is defined in the method mark with attribute ScenarioDependencies
            runtimePluginEvents.CustomizeScenarioDependencies += RuntimePluginEvents_CustomizeScenarioDependencies;
        }
Exemple #15
0
 public void Initialize(RuntimePluginEvents runtimePluginEvents, RuntimePluginParameters runtimePluginParameters,
                        UnitTestProviderConfiguration unitTestProviderConfiguration)
 {
     runtimePluginEvents.CustomizeTestThreadDependencies += (sender, args) =>
     {
         args.ObjectContainer.RegisterTypeAs <DSLTestRunner, ITestRunner>();
         args.ObjectContainer.RegisterTypeAs <ParameterTransform, IParameterTransform>();
     };
 }
Exemple #16
0
 public void Initialize(RuntimePluginEvents runtimePluginEvents, RuntimePluginParameters runtimePluginParameters)
 {
     if (Configuration.ReportPortal.Enabled)
     {
         runtimePluginEvents.CustomizeGlobalDependencies += (sender, e) =>
         {
             e.ObjectContainer.RegisterTypeAs <SafeBindingInvoker, IBindingInvoker>();
         };
     }
 }
 public void Initialize(RuntimePluginEvents runtimePluginEvents, RuntimePluginParameters runtimePluginParameters, UnitTestProviderConfiguration unitTestProviderConfiguration)
 {
     runtimePluginEvents.CustomizeGlobalDependencies += (sender, args) =>
     {
         if (args.SpecFlowConfiguration.StopAtFirstError)
         {
             args.ObjectContainer.RegisterTypeAs <DefaultListener, ITraceListener>();
         }
     };
 }
Exemple #18
0
 public void Initialize(RuntimePluginEvents runtimePluginEvents, RuntimePluginParameters runtimePluginParameters)
 {
     runtimePluginEvents.CustomizeGlobalDependencies += (sender, args) =>
     {
         if (args.SpecFlowConfiguration.StopAtFirstError)
         {
             args.ObjectContainer.RegisterTypeAs <CustomTestRunnerFactory, ITestRunnerFactory>();
         }
     };
 }
        /// <summary>
        /// Custom SpecFlow plugin taking care of automatically reporting SpecFlow scenario information to TestProject.
        /// </summary>
        /// <param name="runtimePluginEvents">Runtime plugin events.</param>
        /// <param name="runtimePluginParameters">Parameters for the runtime plugin events.</param>
        /// <param name="unitTestProviderConfiguration">Unit test provider configuration.</param>
        public void Initialize(
            RuntimePluginEvents runtimePluginEvents,
            RuntimePluginParameters runtimePluginParameters,
            UnitTestProviderConfiguration unitTestProviderConfiguration)
        {
            runtimePluginEvents.CustomizeGlobalDependencies += (sender, args) =>
                                                               args.ObjectContainer.RegisterTypeAs <TestProjectBindingInvoker, IBindingInvoker>();

            runtimePluginEvents.CustomizeTestThreadDependencies += (sender, args) =>
                                                                   args.ObjectContainer.RegisterTypeAs <TestProjectTestTracerWrapper, ITestTracer>();
        }
Exemple #20
0
        public void Initialize(RuntimePluginEvents runtimePluginEvents, RuntimePluginParameters runtimePluginParameters)
        {
            ReporterManager.Initialize(TestingFramework.SpecFlow, new GhprMSTestSpecFlowTestDataProvider());
            ILogger logger = new EmptyLogger();

            ReporterManager.Action(r => { logger = r.Logger; });
            var specFlowHelper = new GhprMSTestSpecFlowHelper(logger);

            GhprPluginHelper.Init(specFlowHelper);
            runtimePluginEvents.CustomizeTestThreadDependencies += CustomizeTestThreadDependencies;
        }
        public void Should_be_able_to_change_default_configuration_from_a_plugin()
        {
            var pluginWithCustomConfiguration = new PluginWithCustomConfiguration(conf => conf.StopAtFirstError = true);
            var runtimePluginEvents           = new RuntimePluginEvents();

            pluginWithCustomConfiguration.Initialize(runtimePluginEvents, new RuntimePluginParameters(), new UnitTestProviderConfiguration());

            var specFlowConfiguration = ConfigurationLoader.GetDefault();

            runtimePluginEvents.RaiseConfigurationDefaults(specFlowConfiguration);

            specFlowConfiguration.StopAtFirstError.Should().BeTrue();
        }
Exemple #22
0
        private IWindsorContainer CreateContainerViaPlugin(ObjectContainer globalContainer, ObjectContainer scenarioContainer)
        {
            var plugin = new WindsorPlugin();
            var events = new RuntimePluginEvents();

            globalContainer.RegisterInstanceAs <IContainerFinder>(new SpecificContainerFinder(() => new WindsorContainer()));

            plugin.Initialize(events, null, null);
            events.RaiseCustomizeGlobalDependencies(globalContainer, null);
            events.RaiseCustomizeScenarioDependencies(scenarioContainer);

            return(scenarioContainer.Resolve <IWindsorContainer>());
        }
        public void Should_be_able_to_override_test_runner_registration_from_a_plugin()
        {
            var pluginWithCustomTestThreadDependencies = new PluginWithCustomTestThreadDependencies(oc => oc.RegisterTypeAs <CustomTraceListener, ITraceListener>());
            var runtimePluginEvents = new RuntimePluginEvents();

            pluginWithCustomTestThreadDependencies.Initialize(runtimePluginEvents, new RuntimePluginParameters(), new UnitTestProviderConfiguration());

            var container = new ObjectContainer();

            runtimePluginEvents.RaiseCustomizeTestThreadDependencies(container);
            var traceListener = container.Resolve <ITraceListener>();

            traceListener.Should().BeOfType(typeof(CustomTraceListener));
        }
        public void Should_be_able_to_register_dependencies_from_a_plugin()
        {
            var pluginWithCustomDependency = new PluginWithCustomDependency();
            var runtimePluginEvents        = new RuntimePluginEvents();

            pluginWithCustomDependency.Initialize(runtimePluginEvents, new RuntimePluginParameters(), new UnitTestProviderConfiguration());

            var container = new ObjectContainer();

            runtimePluginEvents.RaiseRegisterGlobalDependencies(container);

            var customDependency = container.Resolve <ICustomDependency>();

            customDependency.Should().BeOfType(typeof(CustomDependency));
        }
Exemple #25
0
        protected virtual void LoadPlugin(
            string pluginPath,
            IRuntimePluginLoader pluginLoader,
            RuntimePluginEvents runtimePluginEvents,
            UnitTestProviderConfiguration unitTestProviderConfigration,
            ITraceListener traceListener,
            bool traceMissingPluginAttribute)
        {
            traceListener.WriteToolOutput($"Loading plugin {pluginPath}");

            var plugin = pluginLoader.LoadPlugin(pluginPath, traceListener, traceMissingPluginAttribute);
            var runtimePluginParameters = new RuntimePluginParameters();

            plugin?.Initialize(runtimePluginEvents, runtimePluginParameters, unitTestProviderConfigration);
        }
        public void Should_be_able_to_register_scenario_dependencies_from_a_plugin()
        {
            StringConfigProvider configurationHolder = GetConfigWithPlugin();
            var pluginWithCustomScenarioDependencies = new PluginWithCustomScenarioDependencies(oc => oc.RegisterTypeAs <CustomDependency, ICustomDependency>());
            var runtimePluginEvents = new RuntimePluginEvents();

            pluginWithCustomScenarioDependencies.Initialize(runtimePluginEvents, new RuntimePluginParameters(), new UnitTestProviderConfiguration());

            var container = new ObjectContainer();

            runtimePluginEvents.RaiseCustomizeScenarioDependencies(container);

            var customDependency = container.Resolve <ICustomDependency>();

            customDependency.Should().BeOfType(typeof(CustomDependency));
        }
        public void Test_runner_dependencies_from_a_plugin_are_not_in_the_global_container()
        {
            StringConfigProvider configurationHolder   = GetConfigWithPlugin();
            var pluginWithCustomTestThreadDependencies = new PluginWithCustomTestThreadDependencies(oc => oc.RegisterTypeAs <CustomDependency, ICustomDependency>());
            var runtimePluginEvents = new RuntimePluginEvents();

            pluginWithCustomTestThreadDependencies.Initialize(runtimePluginEvents, new RuntimePluginParameters(), new UnitTestProviderConfiguration());

            var container = new ObjectContainer();

            runtimePluginEvents.RaiseRegisterGlobalDependencies(container);

            Action resolveAction = () => container.Resolve <ICustomDependency>();

            resolveAction.Should().Throw <ObjectContainerException>();
        }
        public void Initialize(RuntimePluginEvents runtimePluginEvents, RuntimePluginParameters runtimePluginParameters)
        {
            runtimePluginEvents.CustomizeGlobalDependencies += (sender, args) =>
            {
                args.ObjectContainer.RegisterTypeAs <UnityBindingInstanceResolver, ITestObjectResolver>();
                args.ObjectContainer.RegisterTypeAs <ContainerFinder, IContainerFinder>();
            };

            runtimePluginEvents.CustomizeScenarioDependencies += (sender, args) =>
            {
                args.ObjectContainer.RegisterFactoryAs <IUnityContainer>(() =>
                {
                    var containerBuilderFinder = args.ObjectContainer.Resolve <IContainerFinder>();
                    var containerBuilder       = containerBuilderFinder.GetCreateScenarioContainer();
                    var container = containerBuilder.Invoke();
                    return(container);
                });
            };
        }
        public void Should_be_able_to_register_further_dependencies_based_on_the_configuration()
        {
            var pluginWithCustomTestRunnerFactoryWhenStopAtFirstErrorIsTrue = new PluginWithTraceListenerWhenStopAtFirstErrorIsTrue();
            var runtimePluginEvents = new RuntimePluginEvents();

            pluginWithCustomTestRunnerFactoryWhenStopAtFirstErrorIsTrue.Initialize(runtimePluginEvents, new RuntimePluginParameters(), new UnitTestProviderConfiguration());

            var container             = new ObjectContainer();
            var specFlowConfiguration = ConfigurationLoader.GetDefault();

            runtimePluginEvents.RaiseCustomizeGlobalDependencies(container, specFlowConfiguration);
            container.RegisterTypeAs <NullListener, ITraceListener>();

            specFlowConfiguration.StopAtFirstError = true;
            runtimePluginEvents.RaiseCustomizeGlobalDependencies(container, specFlowConfiguration);

            var customTestRunnerFactory = container.Resolve <ITraceListener>();

            customTestRunnerFactory.Should().BeOfType <DefaultListener>();
        }
Exemple #30
0
        public void Initialize(RuntimePluginEvents runtimePluginEvents, RuntimePluginParameters runtimePluginParameters)
        {
            runtimePluginEvents.CustomizeGlobalDependencies += (sender, args) =>
            {
                args.ObjectContainer.RegisterTypeAs <AutofacBindingInstanceResolver, IBindingInstanceResolver>();
                args.ObjectContainer.RegisterTypeAs <ContainerBuilderFinder, IContainerBuilderFinder>();
            };

            runtimePluginEvents.CustomizeScenarioDependencies += (sender, args) =>
            {
                args.ObjectContainer.RegisterFactoryAs <IComponentContext>(() =>
                {
                    var containerBuilderFinder         = args.ObjectContainer.Resolve <IContainerBuilderFinder>();
                    var createScenarioContainerBuilder = containerBuilderFinder.GetCreateScenarioContainerBuilder();
                    var containerBuilder = createScenarioContainerBuilder();
                    var container        = containerBuilder.Build();
                    return(container.BeginLifetimeScope());
                });
            };
        }