2008-10-06 6 views
1

테스트에 jmockit을 사용하고 있습니다. 테스트하고자하는 한 클래스에서 InitialContext을 직접 사용합니다. 그래서 나는 다음이 : 내 테스트 경우InitialContext 클래스를 jmockit으로 조롱하는 방법?

public class MyClass { 
    public void myMethod() { 
    InitialContext ic = new InitialContext(); 
    javax.mail.Session mailSession = ic.lookup("my.mail.session"); 

    // rest of method follows..... 
    } 

, 나는 내 "조롱"InitialContext 클래스를 사용하기 위해 전화 :

Mockit.redefineMethods(InitialContext.class, MockInitialContext.class); 

가 jmockit으로 InitialContext 클래스를 조롱하는 가장 좋은 방법은 무엇입니까.

나는 Google에서 볼 수있는에서
NoClassDefFoundError: my.class.MockInitialContext 

는, JNDI로 조롱하는 것은 매우 불쾌한 :

는 이미 있지만, 동일한 오류에 걸림돌 유지 (예 : MockInitialContextFactory 내 자신의 사용 등) 몇 가지 방법을 시도했습니다 . 누구든지 나에게 약간의 지침을 주거나 해결책을 가르쳐 주시겠습니까? 그것은 대단히 감사 할 것입니다. 고맙습니다.

답변

2

일반적으로 JNDI를 모의하려면 bean을 배치 할 모의 컨테이너를 제공 할 수있는 EJBMock과 같은 프레임 워크를 사용해야합니다.

다른 대안은 코드에서 컨텍스트를 생성하여 리다이렉터가 전달되도록하는 것입니다 (이것은 의존성 주입 리팩토링입니다). 그러면 임의로 모의 코드를 대체 할 수 있어야합니다.

0

my.class.MockInitialContext가 없으므로 NoClassDefFoundError가 표시됩니다. 그것을 Mockit.redefineMethods()의 인자로 넘겨 주려면 해당 클래스를 생성해야한다. MockInitialContext 클래스는 String 매개 변수를 받아들이고 javax.mail.Session을 반환하는 lookup()이라는 메서드 만 있으면됩니다.

나는 JMockit annotations을 좋아하지만 나머지 페이지에서는 JMockit 사용법에 대한 다른 예제를 볼 수 있습니다.

3

나는 지금 여기에 게시 된 지 1 년이되었지만, 최근부터는 JMockit을 사용하여 EJB 호출을 조롱하고 있었기 때문에 공유하는 것이 옳았다. 다음 testXXX 방법에 당신이 당신의 기대를 정의 할 수 있습니다

@Mocked InitialContext mockedInitialContext; 
@Mocked javax.mail.Session mockedSession; 

:

당신은 같이 당신의 TestCase에 필드와 같은 일부 조롱 객체를 정의 할 수 있습니다 (내가 그것을 테스트하지 않은 비록 코드는 매우 유사해야합니다)()를 호출 한 후에는 테스트하려는 메서드를 호출하는 것만으로 문제가됩니다.

public void testSendindMail(){ 
    new Expectations(){ 
     { 
    mockedInitialContext.lookup("my.mail.session");returns(mockedSession);  
    } 
     }; 
    MyClass cl = new MyClass(); 
    cl.MyMethod();//This need JNDI Lookup 
} 
관련 문제