假设在数据库表中有一个非关键列,称为RECORD_ID,它在数据库中自动生成/排序。@产生于HSQL DB
现在在上面表格的实体中,RECORD_ID字段的上方,我使用hibernate annotation @Generated来指示休眠,DB将负责将值插入到特定字段中。它看起来像下面这样:
@Column(name = "RECORD_ID", unique = true, nullable = true, insertable = false, updatable = false)
@Generated(GenerationTime.INSERT)
private Long recordId;
我运行我的代码,它工作正常。 DB按预期插入值。
现在,我用HSQL编写一个单元测试用例来确保我的逻辑完好无损。 该逻辑具有一个基于RECORD_ID获取记录的查询。
现在,当我创建夹具并调用我的测试时,HSQL在保存夹具时不会为记录的RECORD_ID生成值。它将其保留为空。但是我打算测试的逻辑是基于RECORD_ID获取的,这在这里是不可能的。
它只是在HSQL DB中保持为空。因此我无法完成单元测试!
请注意解决此问题或解决方法。
请在下面找到
@Test
public void testProductCancelDAL() {
savePrerequisites();
Logic myLogic = new Logic();
/* Logic fetches the reservation record based on RECORD_ID */
assertNotNull(myLogic.invoke());
}
public void savePrerequisites() {
//Stroing product type
Product product = ProductFixture.createProduct();
sessionFactory.getCurrentSession().save(product);
//Storing Itinerary
Itinerary itn = ItnFixture.create();
sessionFactory.getCurrentSession().save(itn);
Reservation res = ReservationFixture.create();
sessionFactory.getCurrentSession().save(res);
sessionFactory.getCurrentSession().flush();
}
你是说生产代码按预期工作,但单元测试中类似的代码没有,是吗?如果是这样,那么向我们展示单元测试代码。 –
HSQLDB中列的定义是什么?你可以发布一个CREATE TABLE语句吗? –
@JB Nizet是对的JB..Will也会发布单元测试代码 – Sripaul