2008-10-06 9 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); 

Что это лучший способ для имитации InitialContext класса с JMockit.

Я уже пробовал несколько способов (например, с помощью моей MockInitialContextFactory), но сохраняющий спотыкаясь в ту же ошибку:

NoClassDefFoundError: my.class.MockInitialContext 

Из того, что я могу увидеть на Google, насмехаясь с JNDI довольно противный , Пожалуйста, кто-нибудь может дать мне какое-нибудь руководство или указать на решение? Это было бы очень признательно. Спасибо.

ответ

2

В общем, чтобы издеваться над JNDI, вам нужно будет использовать фреймворк, такой как EJBMock, который может предоставить фиктивный контейнер для развертывания ваших компонентов.

Другой альтернативой является рефакторинг, создающий контекст из вашего кода, чтобы он был передан (это рефакторинг с репликацией зависимостей), а затем вы сможете подставить макет по своему усмотрению.

0

Вы получаете NoClassDefFoundError, потому что my.class.MockInitialContext не существует. Вам нужно создать этот класс, если вы передадите его в качестве аргумента для Mockit.redefineMethods(). Для вашего класса MockInitialContext просто нужен метод с именем lookup(), который принимает параметр String и возвращает javax.mail.Session.

Мне нравится JMockit annotations, но вы можете просмотреть остальную часть этой страницы для других примеров использования JMockit.

3

Я теперь уже год с тех пор, как кто-то разместил здесь, но с тех пор, как я недавно издевался над EJB-звонками, используя JMockit, я чувствовал, что это правильная вещь. (Даже если я не проверить его код должен быть очень похож)

Вы можете определить некоторые Передразнивало объект как поле в вашем TestCase, как:

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

затем в методе testXXX вы можете определить ваши ожидания(), после этого просто вопрос вызова метода, который вы хотите проверить.

public void testSendindMail(){ 
    new Expectations(){ 
     { 
    mockedInitialContext.lookup("my.mail.session");returns(mockedSession);  
    } 
     }; 
    MyClass cl = new MyClass(); 
    cl.MyMethod();//This need JNDI Lookup 
} 
Смежные вопросы