0

如何进行 JUnit 测试来测试 NamedQueries?

我想要一个失败的语法错误,例如:

@Entity
@NamedQueries({
    @NamedQuery(name="Country.findByName",
            query="SELECT c FROM Country c WHERE c.wrongname = :name")
}) 
public class Country {
    private String name;
//...
}

测试应该失败,因为 name < > wrongname

我只需要语法检查,不需要数据库检查

运行时的 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)
4

1 回答 1

0

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

于 2013-11-12T23:46:59.300 回答