【发布时间】:2014-07-10 09:37:56
【问题描述】:
如何模拟 @PrePersist 方法,例如preInit(),我实例化的实体?
我正在使用 TestNG。首选 EasyMock。
@Test(enabled = true)
public void testCreateOrder() {
// Instantiating the new mini order will automatically invoke the pre-persist method, which needs to be mocked/overwritten!
MiniOrder order = new MiniOrder();
order.setDate(new Date());
order.setCustomerId(32423423);
}
MiniOrder.java 是一个具有 pre-persist 方法的实体。同样,我喜欢模拟/覆盖的那个。例如。 this.id = 1;或者,也可以模拟 IdGenerator.getNewId() 方法。
@PrePersist
protected void preInit(){
this.id = IdGenerator.getNewId();
}
我不希望调用 IdGenertor 类,因为它试图获取 jndi 资源。我只是不明白如何提前捕获这个pre-persist方法,以便在对象完全实例化之前不会触发它,分别替换为不同的代码。
【问题讨论】:
-
那么你到底想测试什么?您想测试标记为@PrePersist 的方法中包含的功能吗? (您没有在问题中提供该方法,因此很难提供帮助。)或者您是否尝试在执行持久操作时测试调用 @PrePersist 方法?
-
@DanTemple 谢谢。我改写了。我想避免调用 pre-persist 方法中的 IdGenerator。但是,id 必须以其他方式设置。
-
我认为如果在 MiniOrder 的构造过程中调用 preInit,您将无法模拟对 preInit 的调用,但您应该可以使用 PowerMock 模拟静态方法调用到
IdGenerator.getNewId()。看看documentation 看看这是否对您有帮助。
标签: jpa mocking mockito easymock jmockit