我的项目使用的是JDBC和Spring 3.
随着我的小项目的增长,我需要一些测试。我想为我的DAO层创建集成测试,但我无法使用嵌入式HSQL数据库。
以下是我收到的错误:Caused by: org.hsqldb.HsqlException: user lacks privilege or object not found: name
我的配置:
CREATE SCHEMA GIVEMEASHOW
-- USE_CASE TABLE
CREATE TABLE SHOW (
ID BIGINT GENERATED BY DEFAULT AS IDENTITY,
NAME VARCHAR(255) DEFAULT NULL,
ICON_URL VARCHAR(255) DEFAULT NULL,
PRIMARY KEY (ID),
CONSTRAINT UNIQUE_SHOW_NAME UNIQUE (NAME)
);
我的测试:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations =
{ "classpath:gmas-db-cfg-test.xml" })
public class ShowDaoIT
{
public static Logger LOGGER = Logger.getLogger(ShowDaoIT.class.getName());
@Inject
ShowDao showDao;
@Test
public void saveIT()
{
Show show = new Show();
show.setIconUrl("show1_banner.png");
show.setName("show1");
showDao.save(show);
showDao.list();
}
}
dao方法:
@Override
public void save(final Show show)
{
LOGGER.info("Saving a new Show");
try
{
final String query = "insert into " + TABLE_NAME + " (name, icon_url) " + "VALUES (?, ?)";
jdbcTemplate.update(new PreparedStatementCreator()
{
public PreparedStatement createPreparedStatement(Connection con) throws SQLException
{
PreparedStatement ps = con.prepareStatement(query, new String[]
{ "name", "icon_url" });
ps.setString(1, show.getName());
ps.setString(2, show.getIconUrl());
return ps;
}
}, keyHolder);
show.setId(keyHolder.getKey().intValue());
} catch (final Exception e)
{
e.printStackTrace();
}
}
一切正在我的mysql数据库上工作,我的网站工作正常。我只是无法在dao层上设置集成测试。
感谢您的帮助。
答案 0 :(得分:0)
使用HSQLDB服务器进行测试。如果需要,服务器可以提供mem:数据库。