如何制作测试NamedQueries的JUnit测试?
我想要 syntaxis 错误,例如:
@Entity
@NamedQueries({
@NamedQuery(name="Country.findByName",
query="SELECT c FROM Country c WHERE c.wrongname = :name")
})
public class Country {
private String name;
//...
}
测试应该失败,因为名称< > wrongname
我只需要进行语法检查,而不是DB检查
运行时的StackTrace:
Caused by: javax.persistence.PersistenceException: [PersistenceUnit: unit] Unable to build EntityManagerFactory
...
Caused by: org.hibernate.HibernateException: Errors in named queries: Country.findByName
at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:397)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1327)
at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:867)
答案 0 :(得分:0)
虽然您谈到只检查语法,但您的示例是关于检查查询是否与表列一致。测试这种方法最实用的方法是使用数据库。使用真实的客户端 - 服务器数据库进行单元测试充满了问题。但您可以使用内存嵌入式数据库(如Apache Derby)进行单元测试。最新版本的Spring有一些帮助代码,使这更容易。数据库单元测试仍然比其他单元测试慢得多,因此您需要保留少量数据以防止单元测试变慢。