我在寫JPA層和數據庫之間的集成測試來檢查我寫的SQL是否正確。真正的數據庫是Oracle,不幸的是,出於我的控制原因,我的測試數據庫必須是Derby,所以自然會有一些差異。例如我的JPA類具有以下SQL字符串常量JMockit Deencapsulation setField not persisting
private static final String QUERY = "Select * from Users where regexp_like(user_code, '^SS(B)?N')";
因爲德比不支持regexp_like
我使用JMockits Deencapsulation.setField
改變對飛SQL。例如。
@Test
public void testMyDaoFind() {
new Expectations() {
{
Deencapsulation.setField(MyClass.class, "QUERY", "Select * from Users");
}
};
dao.findUsers();
}
現在忽略了一個事實,這不是因爲它不是測試,將真實的數據庫上運行的實際查詢一個很好的測試(這純粹是爲了滿足我的好奇心,什麼是怎麼回事),我從Eclipselink/Derby獲得SQL異常錯誤,抱怨regexp_like不被識別爲函數或過程。
如果我把在試圖得到的結果列表中的DAO行一個破發點,我可以從一個新的手錶看到
JMockit已經取代正確的查詢
getResultList()返回數據,我期待看到
但是,如果我讓測試貫穿然後一路我得到的afformentioned例外?
非常豐富謝謝你! – PDStat