2015-02-13 3 views
0

Существует некоторый класс:Глумление сессионный компонент дает javax.naming.NoInitialContextException

@Stateless 
public class SomeSimpleBean implements SomeSimpleLocal{ 

    private static SomeSimpleBean cachedInstance; 

    public static SomeSimpleLocal lookup() throws NamingException { 
     if (cachedInstance == null) { 
     cachedInstance = (SomeSimpleLocal) new InitialContext() 
      .lookup(“something”); 
    } 
    return cachedInstance; 
} 
... 
} 

и есть еще один класс:

public class SomeOtherClass(){ 

private SomeSimpleLocal getSomeSimpleBean() throws SomeException { 

    try { 
     return SomeSimpleLocal.lookup(); 
     } catch (Throwable e) { 
     throw new SomeException(“…”, e); 
     } 
    } 

private String generateResponse(String transactionId, String someParameter) throws Exception { 

    SomeSimpleBean beanController = getSomeSimpleBean(); 

    String receivedString = controller.someMethod(transactionId, 
     someParameter); 
    return receivedString; 
    } 
    ... 

public String giveMeSomeData(){ 
    ... 
    String xxx = generateResponse(a,b); 
    ... 
    return someString; 
    } 
} 

Можно ли издеваться SomeSimpleBean в этом случае? Mocking SomeSimpleBean дает javax.naming.NoInitialContextException.

+0

Пожалуйста, покажите нам код вашего теста, где вы попробуете и издеваетесь над фасолью. Кроме того, попробуйте использовать * реальный * код. Это не компилируется, например: 'public class SomeOtherClass() {'. Наконец, пожалуйста, отложите свой код аккуратно, чтобы мы могли легче читать его. –

+0

Решенные. Mocked InitialContextFactoryBuilder, а затем вызвал NamingManager.setInitialContextFactoryBuilder (построитель); Оно работает. –

ответ

1
Hashtable<Object, Object> env = new Hashtable<Object, Object>(); 

InitialContextFactory fact = mock(InitialContextFactory.class); 
InitialContextFactoryBuilder builder = mock(InitialContextFactoryBuilder.class); 
InitialContext ctx = mock(InitialContext.class); 
SomeSimpleBean someSimepleBeanMock = mock(SomeSimpleBean.class); 

NamingManager.setInitialContextFactoryBuilder(builder); 

when(builder.createInitialContextFactory(env)).thenReturn(fact); 
when(NamingManager.getInitialContext(env)).thenReturn(ctx); 

when(ctx.lookup("SomeSimpleBean/local")).thenReturn(
     someSimpleBeanMock); 
Смежные вопросы