假設在數據庫表中有一個非關鍵列,稱爲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