0

Liquibase で単体テストの移行を実行しています。${projectName}Liquibase.java というクラスを使用して、2 つの静的関数を格納します。

public class ${projectName}Liquibase {
  ...
  public static void runMigrations(Connection conn, DB_TYPE dbType) {
           Liquibase liquibase;
    Database database = null;
    try {
        database = DatabaseFactory.getInstance()
                                  .findCorrectDatabaseImplementation(new JdbcConnection(conn));
        liquibase = new Liquibase(dbType.filePath, new FileSystemResourceAccessor(), database);
        liquibase.validate();
        liquibase.update(null);
    } catch (LiquibaseException e) {
        throw new RuntimeException("File at " + dbType.filePath + " Error: " + e.getMessage());
    }
  }
  public static void dropTables() {
    ...
  }
}

System.getProperty("user.dir") と残りのパスを使用して、ファイル dbType.filePath パラメーターを取得します。

ファイルは正常に読み取られますが、更新は最初の変更セットのみを通過し、テスト中にハングします。したがって、テストは実行されません。

テストは、Intellij プロジェクト内の他のファイルとサブモジュールから正常に実行されます。特に、統合テスト スイートは、別のサブモジュールから同じインターフェイスを使用して正常に実行されます。すべてのテストは、次のテストまでパスします。

Running *.*.*.*.*.*DAOTest
2013-11-03 14:59:53,144 DEBUG [main] c.j.bonecp.BoneCPDataSource   : JDBC URL = jdbc:hsqldb:mem:*, Username = SA, partitions = 2, max (per partition) = 5, min (per partition) = 5, helper threads = 3, idle max age = 60 min, idle test period = 240 min
INFO 11/3/13 2:59 PM:liquibase: Reading from PUBLIC.DATABASECHANGELOG
INFO 11/3/13 2:59 PM:liquibase: Successfully acquired change log lock
INFO 11/3/13 2:59 PM:liquibase: Reading from PUBLIC.DATABASECHANGELOG
INFO 11/3/13 2:59 PM:liquibase: /Users/davidgroff/repo/services/${projectName}/server/../core/src/main/java/com/*/*/liquibase/hsqldb.sql: 1::davidgroff: Custom SQL executed
INFO 11/3/13 2:59 PM:liquibase: /Users/davidgroff/repo/services/${projectName}/server/../core/src/main/java/com/*/*/liquibase/hsqldb.sql: 1::davidgroff: ChangeSet /Users/davidgroff/repo/services/*/*/../core/src/main/java/com/*/*/liquibase/hsqldb.sql::1::davidgroff ran successfully in 3ms
INFO 11/3/13 2:59 PM:liquibase: Successfully released change log lock

この後、テストは無限ループのように繰り返しハングします。

私は現在のセットアップを持っています:

      <dependency>
        <groupId>org.liquibase</groupId>
        <artifactId>liquibase-core</artifactId>
        <version>3.0.6</version>
      </dependency>
      <dependency>
        <groupId>org.liquibase</groupId>
        <artifactId>liquibase-maven-plugin</artifactId>
        <version>3.0.6</version>
      </dependency>

Maven 3.1.0 で Java 7 を使用しています。

4

2 に答える 2

0

この問題は、コマンドで liquibase 変更セットが適用された後に接続が作成され、使用されていたことが判明しました。

connection.createStatement(..."***SQL***"...);

新しい接続が作成されたか、その接続のデータが不足していたため、データベースにコミットされていませんでした。Liquibase を使用して移行を実行する前に、なぜこれが機能していたのかは謎です。修正は、次のように呼び出して上記のステートメントをコミットするだけです。

connection.commit();
于 2013-11-05T22:51:47.897 に答える