【发布时间】: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] 之类的内容。我已经回滚了那个编辑。用您的解决方案发布答案,或删除您的问题。
-
没错。