public static UnitOfWorkTestContextDbStrategy For(DatabaseEngine databaseEngine, string databaseName, IDictionary<string, string> properties)
 {
     UnitOfWorkTestContextDbStrategy strategy;
     switch (databaseEngine)
     {
         case DatabaseEngine.SQLite:
             strategy = new SQlLiteUnitOfWorkTestContextDbStrategy();
             break;
         case DatabaseEngine.MsSqlCe:
             strategy = new MsSqlCeUnitOfWorkTestContextDbStrategy(databaseName);
             break;
         case DatabaseEngine.MsSql2005:
             strategy = new MsSql2005UnitOfWorkTestContextDbStrategy(databaseName);
             break;
         case DatabaseEngine.MsSql2005Express:
             strategy = new MsSql2005ExpressUnitOfWorkTestContextDbStrategy(databaseName);
             break;
         default:
             throw new ArgumentOutOfRangeException("databaseEngine");
     }
     if (properties != null)
         foreach (KeyValuePair<string,string> property in properties)
             strategy.NHibernateProperties[property.Key] = property.Value;
     return strategy;
 }
        /// <summary>
        /// 특정 Database System 종류에 대한 테스트용 DB 생성 및 UnitOfWork의 환경설정 정보를 제공하는 
        /// UnitOfWorkTestContextDbStrategy의 인스턴스를 빌드한다.
        /// </summary>
        /// <param name="databaseEngine">Database system 종류</param>
        /// <param name="databaseName">테스트용 Database name</param>
        /// <param name="properties">NHibernate configuration properties</param>
        /// <returns></returns>
        public static UnitOfWorkTestContextDbStrategy For(DatabaseEngine databaseEngine, string databaseName,
                                                          IDictionary<string, string> properties) {
            UnitOfWorkTestContextDbStrategy strategy;

            switch(databaseEngine) {
                case DatabaseEngine.SQLite:
                    strategy = new SQLiteUnitOfWorkTestContextDbStrategy();
                    break;

                case DatabaseEngine.SQLiteForFile:
                    strategy = new SQLiteForFileUnitOfWorkTestContextDbStrategy(databaseName);
                    break;

                case DatabaseEngine.MsSqlCe:
                    strategy = new MsSqlCeUnitOfWorkTestContextDbStrategy(databaseName);
                    break;

                case DatabaseEngine.MsSqlCe40:
                    strategy = new MsSqlCe40UnitOfWorkTestContextDbStrategy(databaseName);
                    break;

                case DatabaseEngine.MsSql2005:
                    strategy = new MsSql2005UnitOfWorkTestContextDbStrategy(databaseName);
                    break;

                case DatabaseEngine.MsSql2005Express:
                    strategy = new MsSql2005ExpressUnitOfWorkTestContextDbStrategy(databaseName);
                    break;

                case DatabaseEngine.OdpNet:
                    strategy = new OdpNetUnitOfWorkTestContextDbStrategy(databaseName);
                    break;

                case DatabaseEngine.DevartOracle:
                    strategy = new DevartOdpNetUnitOfWorkTestContextDbStrategy(databaseName);
                    break;

                case DatabaseEngine.MySql:
                    strategy = new MySqlUnitOfWorkTestContextDbStrategy(databaseName);
                    break;

                case DatabaseEngine.PostgreSql:
                    strategy = new PostgreSqlUnitOfWorkTestContextDbStrategy(databaseName);
                    break;

                case DatabaseEngine.Firebird:
                    strategy = new FireBirdUnitOfWorkTestContextDbStrategy(databaseName);
                    break;

                case DatabaseEngine.Cubrid:
                    strategy = new CubridUnitOfWorkTestContextDbStrategy(databaseName);
                    break;

                default:
                    throw new NotSupportedException("currently not support a specified database engine=" + databaseEngine);
            }

            if(properties != null)
                foreach(var property in properties)
                    strategy.NHibernateProperties[property.Key] = property.Value;

            return strategy;
        }