集成的最佳方法 - 测试spring mysql应用程序?

时间:2013-01-08 21:41:10

标签: mysql spring jenkins integration-testing

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

我发现了很多帖子,主要是谈论HSQLDB或H2,以及一些exotics或停止(如mxj)

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

我知道找到答案的最佳方法是亲自尝试,看看哪种方法效果最好,但也许有人有近期经验并愿意分享:)


使用的技术:

  • MySQL的
  • 弹簧
  • TestNG的
  • 詹金斯

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

2 个答案:

答案 0 :(得分:0)

所以我决定使用h2,这给我带来了导入MySQL哑的一些问题。答案在这里:Running h2 in MODE=MySQL doesn't support MySQL dumps

基本上,你必须删除表名周围的引号(它们似乎适用于字段)。您可以使用反向标记(`)或根本不使用任何刻度/引号。 导致问题的另一个原因是表定义末尾的“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
)

答案 1 :(得分:0)

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