如何模拟@PrePersist方法? [英] How to mock @PrePersist method?

查看:97
本文介绍了如何模拟@PrePersist方法?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何模拟@PrePersist方法,例如我实例化的实体的preInit()?

How do I mock a @PrePersist method, e.g. preInit(), of an entity that I instantiate?

我正在使用TestNG.首选EasyMock.

I'm using TestNG. EasyMock is prefered.

@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()方法.

The MiniOrder.java is an entity that has a pre-persist method. Again, the one I like to mock/overwrite. E.g. this.id = 1; Alternatively one could also mock the IdGenerator.getNewId() method.

@PrePersist
protected void preInit(){
    this.id = IdGenerator.getNewId();
}

我不想调用IdGenertor类,因为它试图获取jndi资源.我只是不了解如何提前捕获此pre-persist方法,以使其在对象完全实例化之前不会被触发,而分别由不同的代码替换.

I don't want the IdGenertor class to be called, because it attempts to grab a jndi resource. I just don't understand how to capture this pre-persist method in advance, so that it's not triggered ,respectively replaced by different code, before the object is fully instantiaded.

推荐答案

在这种情况下,您真正​​想要的是模拟IdGenerator依赖关系,该依赖关系恰巧是从@PrePersist方法调用的.

In this case, what you really want is to mock the IdGenerator dependency, which happens to be called from a @PrePersist method.

使用JMockit,测试可以编写如下:

Using JMockit, the test can be written as follows:

@Test
public void createOrder()
{
    new MockUp<IdGenerator>() {
        // change as needed...
        @Mock int getNewId() { return 123; }
    };

    MiniOrder order = new MiniOrder();
    order.setDate(new Date());
    order.setCustomerId(32423423);
}

这篇关于如何模拟@PrePersist方法?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆