如何防止NamedQueries中的运行时异常

时间:2013-11-07 19:16:34

标签: java jpa junit named-query

如何制作测试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)

1 个答案:

答案 0 :(得分:0)

虽然您谈到只检查语法,但您的示例是关于检查查询是否与表列一致。测试这种方法最实用的方法是使用数据库。使用真实的客户端 - 服务器数据库进行单元测试充满了问题。但您可以使用内存嵌入式数据库(如Apache Derby)进行单元测试。最新版本的Spring有一些帮助代码,使这更容易。数据库单元测试仍然比其他单元测试慢得多,因此您需要保留少量数据以防止单元测试变慢。