2013-06-24 6 views
0

Тестирование EJB3s с использованием Mockito. Я пытаюсь понять, как вводить макет SessionContext без изменения доступа.Mockito: Inject mock SessionContext

SessionContext вводится через @Resource следующим образом:

@Resource 
protected void setSessionContext(SessionContext sessionContext) 
{ 
    this.sessionContext = sessionContext; 
} 

Я прочитал следующий ответ, показывающий, как сделать это с JMockit: Mock injected SessionContext

Есть ли способ сделать то же самое в Mockito?

Кроме того, я прочитал следующий ответ относительно Mockito и частные переменных-членов, предполагающий, что код должен быть переработан (метод установки или параметр конструктора): https://stackoverflow.com/a/8995712

Изменить setSessionContext публика чувствует себя неправильно, изменяя код приложения чтобы сделать его поддающимся проверке с насмешливой структурой, когда SessionContext действительно не должно быть доступно для установки вне EJB и его потомков.

Если у кого есть какие-либо идеи или предложения, я был бы очень признателен. Заранее спасибо. :-)

ответ

0

Вы можете использовать Whitebox.setInternalState, который использует отражение для назначения переменной внутри вашего объекта.

Whitebox.setInternalState(target, field, value) 

цель - целевой объект
поля - строка с именем поля, "SessionContext" в вашем случае
значения - макет SessionContext.