gpt4 book ai didi

java - 如何在单元测试期间注入(inject) PersistenceContext?

转载 作者:太空狗 更新时间:2023-10-29 22:55:10 24 4
gpt4 key购买 nike

这是我的java类:

public class Finder {
@PersistenceContext(unitName = "abc")
EntityManager em;
public boolean exists(int i) {
return (this.em.find(Employee.class, i) != null);
}
}

这是单元测试:

public class FinderTest {
@Test public void testSimple() {
Finder f = new Finder();
assert(f.exists(1) == true);
}
}

测试失败并返回 NullPointerException,因为 Finder.em 没有被任何人注入(inject)。我应该如何正确处理这种情况?是否存在任何最佳实践?

最佳答案

如果没有像 Spring 这样的容器(或类似 Unitils 的东西——它是基于 Spring 的),您将不得不手动注入(inject)实体管理器。在那种情况下,您可以使用像这样的东西作为基类:

public abstract class JpaBaseRolledBackTestCase {
protected static EntityManagerFactory emf;

protected EntityManager em;

@BeforeClass
public static void createEntityManagerFactory() {
emf = Persistence.createEntityManagerFactory("PetstorePu");
}

@AfterClass
public static void closeEntityManagerFactory() {
emf.close();
}

@Before
public void beginTransaction() {
em = emf.createEntityManager();
em.getTransaction().begin();
}

@After
public void rollbackTransaction() {
if (em.getTransaction().isActive()) {
em.getTransaction().rollback();
}

if (em.isOpen()) {
em.close();
}
}
}

关于java - 如何在单元测试期间注入(inject) PersistenceContext?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3807638/

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