Как издеваться над методом @PrePersist?

Как мне издеваться над методом @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, чтобы он не запускался и, соответственно, не заменялся другим кодом до того, как объект будет полностью создан.


person feder    schedule 10.07.2014    source источник
comment
Так что же вы на самом деле пытаетесь проверить? Вы хотите протестировать функциональность, содержащуюся в методе с пометкой @PrePersist? (Вы не указали этот метод в своем вопросе, поэтому здесь будет сложно помочь.) Или вы пытаетесь проверить, что при выполнении операции сохранения вызывается метод @PrePersist?   -  person Dan Temple    schedule 10.07.2014
comment
@DanTemple Спасибо. Я перефразировал. Я хочу избежать вызова IdGenerator в методе pre-persist. Но идентификатор должен быть установлен по-другому.   -  person feder    schedule 10.07.2014
comment
Я не думаю, что вы сможете имитировать вызов preInit, если он вызывается во время создания MiniOrder, но вы должны иметь возможность использовать PowerMock, чтобы имитировать вызов статического метода IdGenerator.getNewId(). Просмотрите документацию, чтобы узнать, может ли она вам помочь.   -  person Dan Temple    schedule 10.07.2014


Ответы (1)


В этом случае вам действительно нужно имитировать зависимость IdGenerator, которая вызывается из метода @PrePersist.

Используя JMockit, тест можно написать следующим образом:

@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);
}
person Rogério    schedule 10.07.2014
comment
Да, я так и сделал :) - person feder; 15.07.2014