public ScriptGenerator(
            Func <RdbmsProviderDefinition, IScriptBuilder> scriptBuilderFactory,
            IRdbmsStorageEntityDefinitionProvider entityDefinitionProvider,
            IScriptToStringConverter scriptToStringConverter)
        {
            ArgumentUtility.CheckNotNull("scriptBuilderFactory", scriptBuilderFactory);
            ArgumentUtility.CheckNotNull("entityDefinitionProvider", entityDefinitionProvider);
            ArgumentUtility.CheckNotNull("scriptToStringConverter", scriptToStringConverter);

            _scriptBuilderFactory     = scriptBuilderFactory;
            _entityDefinitionProvider = entityDefinitionProvider;
            _scriptToStringConverter  = scriptToStringConverter;
        }
        public override void SetUp()
        {
            base.SetUp();

            _classDefinitionForFirstStorageProvider1 = ClassDefinitionObjectMother.CreateClassDefinitionWithMixins(typeof(Order));
            _classDefinitionForFirstStorageProvider2 = ClassDefinitionObjectMother.CreateClassDefinitionWithMixins(typeof(OrderItem));
            _classDefinitionForSecondStorageProvider = ClassDefinitionObjectMother.CreateClassDefinitionWithMixins(typeof(Order));
            _classDefinitionForThirdStorageProvider  = ClassDefinitionObjectMother.CreateClassDefinitionWithMixins(typeof(Customer));

            _firstProviderStorageEntityDefinitionStub = MockRepository.GenerateStub <IRdbmsStorageEntityDefinition>();
            _firstProviderStorageEntityDefinitionStub.Stub(stub => stub.StorageProviderDefinition).Return(SchemaGenerationFirstStorageProviderDefinition);

            _secondProviderStorageEntityDefinitionStub = MockRepository.GenerateStub <IRdbmsStorageEntityDefinition>();
            _secondProviderStorageEntityDefinitionStub.Stub(stub => stub.StorageProviderDefinition).Return(
                SchemaGenerationSecondStorageProviderDefinition);

            _thirdProviderStorageEntityDefinitionStub = MockRepository.GenerateStub <IRdbmsStorageEntityDefinition>();
            _thirdProviderStorageEntityDefinitionStub.Stub(stub => stub.StorageProviderDefinition).Return(
                new NoRdbmsUnitTestStorageProviderStubDefinition("Test"));

            _classDefinitionForFirstStorageProvider1.SetStorageEntity(_firstProviderStorageEntityDefinitionStub);
            _classDefinitionForFirstStorageProvider2.SetStorageEntity(_firstProviderStorageEntityDefinitionStub);
            _classDefinitionForSecondStorageProvider.SetStorageEntity(_secondProviderStorageEntityDefinitionStub);
            _classDefinitionForThirdStorageProvider.SetStorageEntity(_thirdProviderStorageEntityDefinitionStub);

            _fakeScriptResult1 = new ScriptPair("CreateScript1", "DropScript1");
            _fakeScriptResult2 = new ScriptPair("CreateScript2", "DropScript2");
            _fakeScriptResult3 = new ScriptPair("CreateScript3", "DropScript3");
            _entityDefininitionProviderMock            = MockRepository.GenerateStrictMock <IRdbmsStorageEntityDefinitionProvider>();
            _scriptBuilderForFirstStorageProviderMock  = MockRepository.GenerateStrictMock <IScriptBuilder>();
            _scriptBuilderForSecondStorageProviderMock = MockRepository.GenerateStrictMock <IScriptBuilder>();
            _scriptBuilderForThirdStorageProviderMock  = MockRepository.GenerateStrictMock <IScriptBuilder>();

            _scriptToStringConverterStub = MockRepository.GenerateStub <IScriptToStringConverter>();
            _scriptToStringConverterStub.Stub(stub => stub.Convert(_scriptBuilderForFirstStorageProviderMock)).Return(_fakeScriptResult1);
            _scriptToStringConverterStub.Stub(stub => stub.Convert(_scriptBuilderForSecondStorageProviderMock)).Return(_fakeScriptResult2);
            _scriptToStringConverterStub.Stub(stub => stub.Convert(_scriptBuilderForThirdStorageProviderMock)).Return(_fakeScriptResult3);


            _scriptGenerator = new ScriptGenerator(
                pd =>
            {
                switch (pd.Name)
                {
                case "SchemaGenerationFirstStorageProvider":
                    return(_scriptBuilderForFirstStorageProviderMock);

                case "SchemaGenerationSecondStorageProvider":
                    return(_scriptBuilderForSecondStorageProviderMock);

                case "SchemaGenerationThirdStorageProvider":
                    return(_scriptBuilderForThirdStorageProviderMock);
                }
                throw new InvalidOperationException("Invalid storage provider!");
            },
                _entityDefininitionProviderMock,
                _scriptToStringConverterStub);

            _fakeEntityDefinition1 = MockRepository.GenerateStub <IRdbmsStorageEntityDefinition>();
            _fakeEntityDefinition2 = MockRepository.GenerateStub <IRdbmsStorageEntityDefinition>();
            _fakeEntityDefinition3 = MockRepository.GenerateStub <IRdbmsStorageEntityDefinition>();
        }