gpt4 book ai didi

java - 单元测试期间未扫描 JPA 实体

转载 作者:行者123 更新时间:2023-11-30 06:24:39 25 4
gpt4 key购买 nike

我有一个使用 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、定义数据源、entityManagerFactory bean 等。当应用程序运行时,我没有错误。运行此测试时,我得到:

java.lang.IllegalArgumentException: org.hibernate.hql.ast.QuerySyntaxException: MyEntity is not mapped.

对于我尝试查询的所有实体类。实体类用 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

最佳答案

此消息通常表示您没有在 hibernate.cfg 或 persistence.xml 中映射您的实体

<mapping class="com.yourpackage.MyEntity" />
...other entities

确保 MyEntity 类被映射到那里并且它在类中的注释完全是 @Entity(name="MyEntity")

编辑:如果您使用的是上面的 Spring 3.1,请尝试在您的测试上下文中指示 EntityManager 工厂 bean:

  <property name="packagesToScan">
<list>
<value>com.yourpackage.domain</value>
</list>
</property>

关于java - 单元测试期间未扫描 JPA 实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16595779/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com