Example #1
0
        internal static IObjectContainer CreateDefaultScenarioContainer(StringConfigProvider configurationHolder)
        {
            var instance = new ContainerBuilder();
            var testThreadContainer = CreateDefaultTestThreadContainer(configurationHolder);

            return instance.CreateScenarioContainer(testThreadContainer, new ScenarioInfo("test scenario info"));
        }
Example #2
0
        public void Should_be_able_to_specify_a_plugin()
        {
            StringConfigProvider configurationHolder = GetConfigWithPlugin();

            TestRunContainerBuilder.DefaultDependencyProvider = new TestDefaultDependencyProvider(new Mock <IRuntimePlugin>().Object);
            TestRunContainerBuilder.CreateContainer(configurationHolder);
        }
Example #3
0
        public void Should_be_able_to_register_further_dependencies_based_on_the_configuration()
        {
            StringConfigProvider configurationHolder = GetConfigWithPlugin();

            TestRunContainerBuilder.DefaultDependencyProvider = new TestDefaultDependencyProvider(new PluginWithCustomTestRunnerFactoryWhenStopAtFirstErrorIsTrue());

            // with default unit test provider, the plugin should not change the default factory
            var container         = TestRunContainerBuilder.CreateContainer(configurationHolder);
            var testRunnerFactory = container.Resolve <ITestRunnerFactory>();

            testRunnerFactory.ShouldBeType <TestRunnerFactory>();

            // with StopAtFirstError == true, we should get a custom factory
            var specialConfiguratuion = new StringConfigProvider(string.Format(@"<?xml version=""1.0"" encoding=""utf-8"" ?>
              <configuration>
                <specFlow>
                  <plugins>
                    <add name=""MyCompany.MyPlugin"" />
                  </plugins>
                  <runtime stopAtFirstError=""true"" />
                </specFlow>
              </configuration>"));

            container = TestRunContainerBuilder.CreateContainer(specialConfiguratuion);
            var customTestRunnerFactory = container.Resolve <ITestRunnerFactory>();

            customTestRunnerFactory.ShouldBeType <CustomTestRunnerFactory>();
        }
Example #4
0
        public void Test_runner_dependencies_from_a_plugin_are_not_in_the_global_container()
        {
            StringConfigProvider configurationHolder = GetConfigWithPlugin();

            ContainerBuilder.DefaultDependencyProvider = new TestDefaultDependencyProvider(new PluginWithCustomTestThreadDependencies(oc => oc.RegisterTypeAs <CustomDependency, ICustomDependency>()));
            var container = TestObjectFactories.CreateDefaultGlobalContainer(configurationHolder);

            Assert.Throws <ObjectContainerException>(() => container.Resolve <ICustomDependency>(), "Interface cannot be resolved");
        }
Example #5
0
        public void Should_be_able_to_register_feature_dependencies_from_a_plugin()
        {
            StringConfigProvider configurationHolder = GetConfigWithPlugin();
            var testDefaultDependencyProvider        = new TestDefaultDependencyProvider(new PluginWithCustomFeatureDependencies(oc => oc.RegisterTypeAs <CustomDependency, ICustomDependency>()));
            var container        = TestObjectFactories.CreateDefaultFeatureContainer(configurationHolder, testDefaultDependencyProvider);
            var customDependency = container.Resolve <ICustomDependency>();

            customDependency.Should().BeOfType(typeof(CustomDependency));
        }
Example #6
0
        public void Should_be_able_to_change_default_configuration_from_a_plugin()
        {
            StringConfigProvider configurationHolder = GetConfigWithPlugin();

            ContainerBuilder.DefaultDependencyProvider = new TestDefaultDependencyProvider(new PluginWithCustomConfiguration(conf => conf.StopAtFirstError = true));
            var container            = TestObjectFactories.CreateDefaultGlobalContainer(configurationHolder);
            var runtimeConfiguration = container.Resolve <SpecFlowConfiguration>();

            runtimeConfiguration.StopAtFirstError.Should().BeTrue();
        }
Example #7
0
        public void Should_be_able_to_override_test_runner_registration_from_a_plugin()
        {
            StringConfigProvider configurationHolder = GetConfigWithPlugin();

            ContainerBuilder.DefaultDependencyProvider = new TestDefaultDependencyProvider(new PluginWithCustomTestThreadDependencies(oc => oc.RegisterTypeAs <CustomTraceListener, ITraceListener>()));
            var container     = TestObjectFactories.CreateDefaultTestThreadContainer(configurationHolder);
            var traceListener = container.Resolve <ITraceListener>();

            traceListener.Should().BeOfType(typeof(CustomTraceListener));
        }
Example #8
0
        public void Should_be_able_to_register_dependencies_from_a_plugin()
        {
            StringConfigProvider configurationHolder = GetConfigWithPlugin();

            TestRunContainerBuilder.DefaultDependencyProvider = new TestDefaultDependencyProvider(new PluginWithCustomDependency());
            var container        = TestRunContainerBuilder.CreateContainer(configurationHolder);
            var customDependency = container.Resolve <ICustomDependency>();

            customDependency.ShouldBeType(typeof(CustomDependency));
        }
        public void Should_be_able_to_specify_custom_unit_test_provider_in_config_compatible_way()
        {
            var configurationHolder = new StringConfigProvider(string.Format(@"<?xml version=""1.0"" encoding=""utf-8"" ?>
              <configuration>
                <specFlow>
                  <unitTestProvider name=""myprovider"" runtimeProvider=""{0}"" />
                </specFlow>
              </configuration>",
                                                                             typeof(CustomUnitTestProvider).AssemblyQualifiedName));

            var container        = TestObjectFactories.CreateDefaultGlobalContainer(configurationHolder);
            var unitTestProvider = container.Resolve <IUnitTestRuntimeProvider>();

            unitTestProvider.Should().BeOfType(typeof(CustomUnitTestProvider));
        }
Example #10
0
        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>();
        }
Example #11
0
        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));
        }
Example #12
0
        public void Should_be_able_to_specify_a_plugin_with_parameters()
        {
            StringConfigProvider configurationHolder = new StringConfigProvider(string.Format(@"<?xml version=""1.0"" encoding=""utf-8"" ?>
              <configuration>
                <specFlow>
                  <plugins>
                    <add name=""MyCompany.MyPlugin"" parameters=""foo, bar"" />
                  </plugins>
                </specFlow>
              </configuration>"));
            var pluginMock = new Mock <IRuntimePlugin>();

            ContainerBuilder.DefaultDependencyProvider = new TestDefaultDependencyProvider(pluginMock.Object);
            TestObjectFactories.CreateDefaultGlobalContainer(configurationHolder);

            pluginMock.Verify(p => p.Initialize(It.IsAny <RuntimePluginEvents>(), It.Is <RuntimePluginParameters>(pp => pp.Parameters == "foo, bar")));
        }
        public void Should_be_able_to_customize_dependencies_from_config()
        {
            var configurationHolder = new StringConfigProvider(string.Format(@"<?xml version=""1.0"" encoding=""utf-8"" ?>
              <configuration>
                <specFlow>
                  <runtime>  
                    <dependencies>
                      <register type=""{0}"" as=""{1}""/>
                    </dependencies>
                  </runtime>
                </specFlow>
              </configuration>",
                typeof(DummyTestRunnerFactory).AssemblyQualifiedName,
                typeof(ITestRunnerFactory).AssemblyQualifiedName));

            var container = TestRunContainerBuilder.CreateContainer(configurationHolder);
            var testRunnerFactory = container.Resolve<ITestRunnerFactory>();
            testRunnerFactory.ShouldBeType(typeof(DummyTestRunnerFactory));
        }
        public void Should_be_able_to_customize_dependencies_from_config()
        {
            var configurationHolder = new StringConfigProvider(string.Format(@"<?xml version=""1.0"" encoding=""utf-8"" ?>
              <configuration>
                <specFlow>
                  <runtime>  
                    <dependencies>
                      <register type=""{0}"" as=""{1}""/>
                    </dependencies>
                  </runtime>
                </specFlow>
              </configuration>",
                                                                             typeof(DummyTestRunnerFactory).AssemblyQualifiedName,
                                                                             typeof(ITestRunnerFactory).AssemblyQualifiedName));

            var container         = TestObjectFactories.CreateDefaultGlobalContainer(configurationHolder);
            var testRunnerFactory = container.Resolve <ITestRunnerFactory>();

            testRunnerFactory.Should().BeOfType(typeof(DummyTestRunnerFactory));
        }
Example #15
0
        public void Should_be_able_to_specify_custom_unit_test_provider_in_config()
        {
            var configurationHolder = new StringConfigProvider(string.Format(@"<?xml version=""1.0"" encoding=""utf-8"" ?>
              <configuration>
                <specFlow>
                  <runtime>  
                    <dependencies>
                      <register type=""{0}"" as=""{1}"" name=""myprovider""/>
                    </dependencies>
                  </runtime>
                  <unitTestProvider name=""myprovider"" />
                </specFlow>
              </configuration>",
                                                                             typeof(CustomUnitTestProvider).AssemblyQualifiedName,
                                                                             typeof(IUnitTestRuntimeProvider).AssemblyQualifiedName));

            var container        = TestRunContainerBuilder.CreateContainer(configurationHolder);
            var unitTestProvider = container.Resolve <IUnitTestRuntimeProvider>();

            unitTestProvider.ShouldBeType(typeof(CustomUnitTestProvider));
        }
Example #16
0
        public void Should_be_able_to_customize_dependencies_from_json_config()
        {
            var expectedInterface      = typeof(ITestRunnerFactory).AssemblyQualifiedName;
            var expectedImplementation = typeof(DummyTestRunnerFactory).AssemblyQualifiedName;

            var configurationHolder = new StringConfigProvider(
                $@"{{
                ""runtime"": {{ 
                    ""dependencies"": [
                        {{
                            ""type"": ""{expectedImplementation}"",
                            ""as"": ""{expectedInterface}""
                        }}
                    ]
                }}
            }}");

            var container         = TestObjectFactories.CreateDefaultGlobalContainer(configurationHolder);
            var testRunnerFactory = container.Resolve <ITestRunnerFactory>();

            testRunnerFactory.Should().BeOfType(typeof(DummyTestRunnerFactory));
        }
Example #17
0
        public void Should_be_able_to_specify_a_plugin()
        {
            StringConfigProvider configurationHolder = GetConfigWithPlugin();

            TestRunContainerBuilder.CreateContainer(configurationHolder);
        }
        public void Should_be_able_to_specify_custom_unit_test_provider_in_config()
        {
            var configurationHolder = new StringConfigProvider(string.Format(@"<?xml version=""1.0"" encoding=""utf-8"" ?>
              <configuration>
                <specFlow>
                  <runtime>  
                    <dependencies>
                      <register type=""{0}"" as=""{1}"" name=""myprovider""/>
                    </dependencies>
                  </runtime>
                  <unitTestProvider name=""myprovider"" />
                </specFlow>
              </configuration>",
                typeof(CustomUnitTestProvider).AssemblyQualifiedName,
                typeof(IUnitTestRuntimeProvider).AssemblyQualifiedName));

            var container = TestRunContainerBuilder.CreateContainer(configurationHolder);
            var unitTestProvider = container.Resolve<IUnitTestRuntimeProvider>();
            unitTestProvider.ShouldBeType(typeof(CustomUnitTestProvider));
        }
Example #19
0
        public void Should_be_able_to_specify_a_plugin_with_parameters()
        {
            StringConfigProvider configurationHolder = new StringConfigProvider(string.Format(@"<?xml version=""1.0"" encoding=""utf-8"" ?>
              <configuration>
                <specFlow>
                  <plugins>
                    <add name=""MyCompany.MyPlugin"" parameters=""foo, bar"" />
                  </plugins>
                </specFlow>
              </configuration>"));
            var pluginMock = new Mock<IRuntimePlugin>();
            ContainerBuilder.DefaultDependencyProvider = new TestDefaultDependencyProvider(pluginMock.Object);
            TestObjectFactories.CreateDefaultGlobalContainer(configurationHolder);

            pluginMock.Verify(p => p.Initialize(It.IsAny<RuntimePluginEvents>(), It.Is<RuntimePluginParameters>(pp => pp.Parameters == "foo, bar")));
        }
Example #20
0
        public void Should_be_able_to_register_further_dependencies_based_on_the_configuration()
        {
            StringConfigProvider configurationHolder = GetConfigWithPlugin();

            ContainerBuilder.DefaultDependencyProvider = new TestDefaultDependencyProvider(new PluginWithCustomTestRunnerFactoryWhenStopAtFirstErrorIsTrue());

            // with default unit test provider, the plugin should not change the default factory
            var container = TestObjectFactories.CreateDefaultGlobalContainer(configurationHolder);
            var testRunnerFactory = container.Resolve<ITestRunnerManager>();
            testRunnerFactory.Should().BeOfType<TestRunnerManager>();

            // with StopAtFirstError == true, we should get a custom factory
            var specialConfiguratuion = new StringConfigProvider(string.Format(@"<?xml version=""1.0"" encoding=""utf-8"" ?>
              <configuration>
                <specFlow>
                  <plugins>
                    <add name=""MyCompany.MyPlugin"" />
                  </plugins>
                  <runtime stopAtFirstError=""true"" />
                </specFlow>
              </configuration>"));
            container = TestObjectFactories.CreateDefaultGlobalContainer(specialConfiguratuion);
            var customTestRunnerFactory = container.Resolve<ITestRunnerFactory>();
            customTestRunnerFactory.Should().BeOfType<CustomTestRunnerFactory>();
        }
        public void Should_be_able_to_specify_custom_unit_test_provider_in_config_compatible_way()
        {
            var configurationHolder = new StringConfigProvider(string.Format(@"<?xml version=""1.0"" encoding=""utf-8"" ?>
              <configuration>
                <specFlow>
                  <unitTestProvider name=""myprovider"" runtimeProvider=""{0}"" />
                </specFlow>
              </configuration>",
                typeof(CustomUnitTestProvider).AssemblyQualifiedName));

            var container = TestObjectFactories.CreateDefaultGlobalContainer(configurationHolder);
            var unitTestProvider = container.Resolve<IUnitTestRuntimeProvider>();
            unitTestProvider.Should().BeOfType(typeof(CustomUnitTestProvider));
        }