4

jdbc 経由で MySQL データベースを使用しているアプリケーションの統合テストを作成したいと考えています。(参考までに: アプリケーションにはユーザー データベースと wiki があるため、高度なものは何もありません)

主に HSQLDB や H2 について話している記事や、いくつかのエキゾチックな記事や廃止された記事 (mxj など) にたくさん出くわしました。

悲しいことに、これらのスレッドのほとんどは何年も前に作成されたものであり、それ以来多くのことが変更されています. 私は最近の経験を持つ人を探しています (または、私が得たような同様のセットアップを持っている方が良いです。つまり、春と、これらのテストをローカルとジェンキンの両方で実行する必要があることを意味します)!

答えを見つける最善の方法は、自分で試してみて、何が最適かを確認することだと理解していますが、最近の経験があり、喜んで共有してくれる人がいるかもしれません:)


使用された技術:

  • MySQL
  • テストNG
  • ジェンキンス

あなたの経験とアドバイスを私と共有できれば、とても感謝しています。

4

2 に答える 2

0

この目的のために正確に作成された Maven プラグインを試してください: jcabi-mysql-maven-plugin. これは、フェーズでローカル MySQL サーバーを起動し、pre-integration-testでシャットダウンしpost-integration-testます。

于 2013-10-09T18:04:59.883 に答える
0

そこで、h2 を使用することにしましたが、MySQL ダムのインポートで問題が発生しました。答えはここにあります: MODE=MySQL で h2 を実行すると、MySQL ダンプがサポートされません

基本的に、テーブル名の周りの引用符を削除する必要があります (それでも、フィールドに対してはうまく機能するようです)。バックティック ( ` ) を使用することも、ティックや引用符をまったく使用しないこともできます。もう 1 つの問題は、テーブル定義の末尾にある「AUTO_INCREMENT = 1」です。h2 は開始後のデフォルトとして 1 を使用するため、このコマンドはとにかく必要ありません。

組み込みデータベースをセットアップする方法の例を次に示します。

public class InMemoryTest {
    @org.testng.annotations.Test // ofc this can be JUnit @Test as well
    public void test() throws Exception {
        Class.forName("org.h2.Driver");

        Connection conn = DriverManager.
                getConnection("jdbc:h2:mem:test;MODE=MySQL;IGNORECASE=TRUE;INIT=RUNSCRIPT FROM 'src/test/resources/test.sql'");


        Statement stat = conn.createStatement();
        stat.execute("INSERT INTO `usr_avatar` (\"usr_avatar_user_id\") VALUES (1)");
    }
}

test.sql は次のようになります。

DROP TABLE IF EXISTS usr_avatar;
CREATE TABLE IF NOT EXISTS usr_avatar (
  "usr_avatar_id" int(11) NOT NULL AUTO_INCREMENT,
  "usr_avatar_user_id" int(11) NOT NULL
)
于 2013-01-24T21:10:19.563 に答える