Мы перешли на ядро mockito вместо mockito-all, чтобы иметь возможность использовать новую свободную функциональность заглушки. У нас также есть test-util-lib, который содержит утилиту для заглушения InitialContext. В проектах maven, использующих этот test-util-lib, я неожиданно получаю UnnecessaryStubbingException
.
Это код:
public class WildFlyInitialContextFactory implements InitialContextFactory {
private static final Map<String, Object> ENTRIES = new HashMap<>();
private static Context context = initMock();
static {
System.setProperty( "java.naming.factory.initial", WildFlyInitialContextFactory.class.getName() );
}
private static Context initMock() {
Context context = null;
try {
context = mock( Context.class );
when( context.lookup( anyString() ) ).thenAnswer( invocation -> {
if ( ENTRIES.containsKey( invocation.getArguments()[0] ) ) {
return ENTRIES.get( invocation.getArguments()[0] );
}
else {
throw new NamingException( );
}
} );
}
catch (NamingException ex ) {
LOG.error( ex );
}
return context;
}
public static void setEntry(String lookup, Object object) {
ENTRIES.put( lookup, object );
}
@Override public Context getInitialContext(Hashtable<?, ?> arg0) {
return context;
}
}
Я также попробовал наоборот (конструкция doAnswer.when) с тем же результатом. Примечание: я хочу запускать только на .lookup (строковый аргумент).