internal static IObjectContainer CreateDefaultScenarioContainer(StringConfigProvider configurationHolder) { var instance = new ContainerBuilder(); var testThreadContainer = CreateDefaultTestThreadContainer(configurationHolder); return instance.CreateScenarioContainer(testThreadContainer, new ScenarioInfo("test scenario info")); }
public void Should_be_able_to_specify_a_plugin() { StringConfigProvider configurationHolder = GetConfigWithPlugin(); TestRunContainerBuilder.DefaultDependencyProvider = new TestDefaultDependencyProvider(new Mock <IRuntimePlugin>().Object); TestRunContainerBuilder.CreateContainer(configurationHolder); }
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>(); }
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"); }
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)); }
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(); }
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)); }
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)); }
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 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 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)); }
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)); }
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)); }
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)); }
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_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)); }