这是一个有点奇怪的问题,但它已经困扰了我几个月了。我已经使用 Wicket + Hibernate(使用 Maven 构建)构建了一个基于 JPA 的 Web 应用程序,并且想直接测试 DAO 层。我创建了一个用于测试的特定 src/test/resources/META-INF/persistence.xml 文件,但一直与 WTP 等发生冲突。为了解决这些问题,我创建了一个单独的测试项目,单元测试位于其中。有没有更好的方法来管理 JPA 项目的单元测试,而无需在持久性文件之间进行决斗?
附录:其他测试框架(例如,TestNG)会让这更容易吗?
最佳答案
您不妨试试mockito .测试工作如下:
您使用 mockito 来“实现”EntityManager
。代替真正的代码,您使用 mockito 的方法说“如果应用程序调用 getReference()
,则返回此对象”。在后台,mockito 将创建一个代理实例,它拦截 Java 方法调用并返回您指定的值。调用其他方法将返回 null
。
模拟 createQuery()
之类的东西的工作方式相同,但您首先需要创建 Query
的模型,然后使用与 getReference( )
(返回查询模型)。
由于您不使用真正的 EM,因此您不需要真正的 persistence.xml
。
一个更简单的解决方案是,如果您可以设置一些属性来更改 persistence.xml
文件的名称,但我认为这是不可能的。
其他一些可能有帮助的链接:
关于java - 基于 JPA 的 JUnit 测试最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1234763/