4

我想为我的应用程序编写集成测试,该应用程序通过 jdbc 使用 MySQL db。(仅供参考:到目前为止,该应用程序有一个用户数据库和一个 wiki,所以没有什么复杂的)

我遇到了很多帖子,主要是在谈论 HSQLDB 或 H2,以及一些外来或已停产的帖子(如 mxj)

可悲的是,这些线程中的大多数都是几年前制作的,从那时起很多事情都发生了变化。我正在寻找具有最近经验的人(或者甚至更好地像我一样拥有类似的设置 - 这意味着春天和需要在本地和詹金斯上运行这些测试)!

我知道找到答案的最好方法是自己尝试一下,看看什么最有效,但也许有人最近有经验并愿意分享:)


使用的技术:

  • MySQL
  • 春天
  • 测试NG
  • 詹金斯

如果您能与我分享您的经验和建议,我将不胜感激。

4

2 回答 2

0

所以我决定使用 h2,这给了我导入 MySQL 的一些问题。答案就在这里:在 MODE=MySQL 中运行 h2 不支持 MySQL 转储

基本上,您必须删除表名周围的引号(尽管如此,它们似乎对字段工作正常)。您可以使用反引号 ( ` ) 或根本不使用任何刻度/引号。导致问题的另一件事是表定义末尾的“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 回答
0

尝试为此目的创建的 Maven 插件:jcabi-mysql-maven-plugin. 它在阶段启动本地 MySQL 服务器pre-integration-test并在post-integration-test.

于 2013-10-09T18:04:59.883 回答