如何在 JUnit 测试中初始化 EJB 的 EntityManager?

发布于 2025-01-01 23:57:34 字数 316 浏览 0 评论 0原文

我正在尝试为具有注入的 EntityManager 的无状态会话 bean 编写 JUnit 测试:

@Stateless
public class MyServiceBean implements MyService, ... {
@PersistenceContext
    private EntityManager em;
    ....

当然,不执行任何操作,em 在测试流程中保持为空...

测试应该独立运行(不在 Java EE 容器中) )。

请问我该怎么做? (简单的解决方案将受到高度赞赏:-)

I'm trying to write JUnit tests for a stateless session bean that has an injected EntityManager:

@Stateless
public class MyServiceBean implements MyService, ... {
@PersistenceContext
    private EntityManager em;
    ....

Of course, without doing anything, em remains null in the flow of the test...

The tests should run standalone (NOT in a Java EE container).

How do I do that please? (simple solutions will be most appreciated :-)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

残花月 2025-01-08 23:57:34

简单的答案是不要这样做,如果您想像在实际工作应用程序中一样注入持久性上下文,请使用嵌入式/外部服务器进行测试。有关测试 EJB 和 JPA 的更多信息,您可以在这里找到:当前最佳框架单元测试EJB3/JPA

Simple answer is don't do that, if you want to have persistence context injected like in the real working application, use embedded/external server for testing. More info about testing EJBs and JPA you can find here: Best current framework for unit testing EJB3 / JPA

瞎闹 2025-01-08 23:57:34

如果您想测试数据访问逻辑(条件代码、jpql 查询等),我要做的就是使用 HSQLDB 。无需模拟 EntityManager 或拥有 Java EE 容器,它可以与构建过程很好地集成。

If you want to test your data access logic (criteria code, jpql queries, etc) what I'd do is using HSQLDB. There is no need to mock the EntityManager or have a Java EE container and it integrates nicely with the build process.

青衫负雪 2025-01-08 23:57:34

你用 Mockito 来嘲笑它。您在类上添加 Mockito 的依赖项并使用 @MockitoJUnitRunner 注解,您可以在单元测试中使用 @Mock EntityManger entityManager@InjectMocks MyService service 。您将像 when(entityManager.findById(id)).thenReturn(somethingIWantItToReturn); 一样对其进行存根。

You mock it with Mockito. You add dependency of Mockito and with @MockitoJUnitRunner annotation on your class, you can @Mock EntityManger entityManager and @InjectMocks MyService service in your unit test. You will stub it like when(entityManager.findById(id)).thenReturn(somethingIWantItToReturn);.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文