我在写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