我有一个使用 Hibernate/JPA 的成熟 Java 应用程序,它工作得很好。我们正在尝试添加一些单元/集成测试。我正在使用 Spring 的 TestContext 框架执行此操作,我的测试类是这样的:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration
public class ServiceTest {
@Autowired
private MyService myService;
@Test
public void testWorkspaceThing() throws Exception {
List<MyEntity> entities = myService.someMethod();
assertNotNull(entities);
}
}
我将所有必要的上下文配置从应用程序上下文复制/粘贴到 ServiceTest-context.xml 中。这包括 context:component-scan、定义 dataSource、entityManagerFactory beans 等。当应用程序运行时,我没有错误。运行此测试时,我得到:
java.lang.IllegalArgumentException: org.hibernate.hql.ast.QuerySyntaxException: MyEntity is not mapped.
对于我尝试查询的任何和所有实体类。Entity 类使用 javax.persistence.Entity 等进行注释。
有谁知道为什么使用 TestContext 会失败?
更新
我们的 persistence.xml 文件本质上是空的:
<persistence-unit name="some-pu" />
所以我假设它是自动扫描来查找所有带注释的实体类。在运行单元测试时,它在 tomcat 中的部署方式与文件夹结构之间的目录结构可能有所不同吗?我们的 persistence.xml 在 WebContent/WEB-INF/classes/META-INF
另外-我注意到您可以使用 Spring 3.1 定义“packagesToScan”,但我们使用的是 Spring 3.0.6.RELEASE