我有一个Java Spring应用程序,它有一个MS SQL DB。对于DAO类的单元测试,我使用Embedded H2 DB将一些虚拟数据插入到H2 DB中。但我正在努力让自动生成主键工作。
这是创建架构/表/插入虚拟数据查询,它位于Spring项目目录的resources文件夹中的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字段保留为null,而不会在id列中插入任何值。
INSERT INTO local_db.test_db (username, isActive) VALUES (?,?);
如何从Junit测试代码中对Embedded.H2数据库进行自动增量处理?
答案 0 :(得分:0)
我将创建表查询修改为
后工作CREATE TABLE local_db.test_db (
id int(4) NOT NULL IDENTITY,
username varchar(25) NOT NULL,
isActive varchar(1) NOT NULL
);