无法模拟EntityManager标准API



我想为EntityManager编写junit,但无法模拟EntityManager。我的服务类方法如下:

@PersistenceContext
private EntityManager em;
public List<Items> getItems() {
Order order = Order.desc("ASC");
Criteria crit = em.unwrap(Session.class).createCriteria(Items.class);
Criteria critRowCount = em.unwrap(Session.class).createCriteria(Items.class);
crit.add(Restrictions.eq("createdBy", "John"));
critRowCount.add(Restrictions.eq("createdBy", "John"));
crit.setFirstResult((pageNo - 1) * pageSize);
crit.setMaxResults(pageSize);
crit.addOrder(order);
List<Items> items = crit.list();
critRowCount.add(Restrictions.sqlRestriction("Query"));
critRowCount.setProjection(Projections.rowCount()).uniqueResult();
return items;
}

我用在我的上一个例子:

@MockBean
private EntityManager em;

和当我在service

中调用以下方法时
List<Items> items = crit.list();

这将击中DB。请帮我解决这个问题。

提前感谢!

我不知道为什么嘲弄不起作用(从您在这里展示的内容来看,我想说它应该起作用)。但我想建议另一种方法。我认为getItems()方法存在于某种Repository或DAO中。对于单元测试,我通常会嘲笑它们。如果我想测试getItems(),我实际上会尝试在集成测试中通过数据库(例如通过testcontainers)测试它,因为这无论如何都相当接近数据库。

在你的具体情况下,我可能甚至不会尝试测试getItems(),因为它似乎只包含一些管道代码。

作为一个经验法则:嘲笑你不拥有的东西通常不是一个好主意。

最新更新