2014-07-10 6 views
2

어떻게 @PrePersist 메서드를 조롱합니까? 인스턴스화하는 엔티티의 preInit()?@PrePersist 방법을 조롱하는 방법?

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는 사전 지속 메소드가있는 엔티티입니다. 다시 한 번 모의/덮어 쓰기를 좋아합니다. 예 : this.id = 1; 또는 IdGenerator.getNewId() 메소드를 조롱 할 수도 있습니다. 그것은 JNDI 리소스를 잡아 시도하기 때문에

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

가 나는 IdGenertor 클래스가 호출되고 싶지 않아. 나는이 프리 - 텐션 방법을 미리 포착하는 방법을 이해하지 못한다. 따라서 객체가 완전히 인스턴스화되기 전에 각각 다른 코드로 대체되었다.

+1

그래서 당신이 실제로 테스트하려고 다음과 같이

JMockit를 사용하여 테스트를 쓸 수있다? @PrePersist라고 표시된 메서드 내에 포함 된 기능을 테스트 하시겠습니까? (당신은 당신의 질문에 그 방법을 제공하지 않았기 때문에 거기에서 도울 것입니다.) 또는 @PrePersist 메서드가 호출되는 지속 연산을 수행 할 때 테스트하려고합니까? –

+0

@ DanTemple 감사. 나는 문안했다. pre-persist 메서드 내에서 IdGenerator가 호출되지 않도록하고 싶습니다. 그러나 이드는 다른 방식으로 설정되어야합니다. – feder

+1

MiniOrder 구축 중에 호출하면 preInit 호출을 모의 할 수는 없을 것이라고 생각하지만 [PowerMock] (https://code.google.com/p/)을 사용할 수 있어야합니다. powermock /)를 호출하여 정적 메소드 호출을'IdGenerator.getNewId()'로 조롱한다. 이 방법이 도움이되는지 확인하려면 [documentation] (https://code.google.com/p/powermock/wiki/MockStatic)을 참조하십시오. –

답변

1

이 경우 실제로 원하는 것은 메서드에서 호출되는 IdGenerator 종속성을 조롱하는 것입니다.

@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); 
} 
+0

예, 그게 내가 한 것입니다 :) – feder

관련 문제