【问题标题】:Embedded. H2 DB Auto Increment (Java Test Case)嵌入式。 H2 DB 自动增量(Java 测试用例)
【发布时间】:2018-03-02 15:13:52
【问题描述】:

我有一个带有 MS SQL 数据库的 Java Spring 应用程序。为了对 DAO 类进行单元测试,我使用 Embedded H2 DB 将一些虚拟数据插入到 H2 DB 中。但我正在努力让主键的自动生成工作。

这是创建模式/表/插入虚拟数据查询,它位于我的 Spring 项目目录的资源文件夹中的 create.sql 文件中:

CREATE SCHEMA local_db AUTHORIZATION sa; 
CREATE TABLE local_db.test_db (
  id int(4) NOT NULL AUTO_INCREMENT,
  username varchar(25) NOT NULL,
  isActive varchar(1) NOT NULL,
  PRIMARY KEY (id)
);

插入虚拟数据

INSERT INTO local_db.test_db VALUES (1,'TestDATA1','Y');
INSERT INTO local_db.test_db VALUES (2,'TestDATA2','Y');
INSERT INTO local_db.test_db VALUES (3,'TestDATA3','Y');

我的测试代码正在读取这个 create.sql 文件,该文件正在使用虚拟数据正确创建架构/表。

这是在测试类 setUp() 中完成的

DaoClassUnderTest daoClassUnderTest;
  public void setUp() throws Exception {
    EmbeddedDatabase db = new EmbeddedDatabaseBuilder().
    setType(EmbeddedDatabaseType.H2).
    addScript("create.sql").
    build(); 
    daoClassUnderTest  = new DaoClassUnderTest(db);
  }

但是当我实际调用 DAO 类(正在测试)上的 insert 方法时,它会插入数据,但会将 id 字段留空,而不会在 id 列中插入任何值。

INSERT INTO local_db.test_db (username, isActive) VALUES (?,?);

如何让自动增量在 Junit 测试代码中的 Embedded.H2 DB 上工作?

【问题讨论】:

  • 请不要在问题标题中添加 [SOLVED] 之类的内容。我已经回滚了那个编辑。用您的解决方案发布答案,或删除您的问题。
  • 没错。

标签: java junit h2


【解决方案1】:

在我将创建表查询修改为

后工作
CREATE TABLE local_db.test_db (
  id int(4) NOT NULL IDENTITY,
  username varchar(25) NOT NULL,
  isActive varchar(1) NOT NULL
);

【讨论】:

    猜你喜欢
    • 2015-11-14
    • 1970-01-01
    • 2014-08-03
    • 1970-01-01
    • 2018-04-01
    • 2014-04-10
    • 2017-03-05
    • 2012-04-21
    • 2018-02-05
    相关资源
    最近更新 更多