Исключение Mockito UnneededStubbingException, возникающее после перехода от mockito-all к ядру mockito - PullRequest
0 голосов
/ 19 марта 2019

Мы перешли на ядро ​​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 (строковый аргумент).

1 Ответ

0 голосов
/ 19 марта 2019

Кажется, что Mockito, когда запускается тестовый класс, сканирует неиспользуемые макеты.Этот макет (будучи библиотечным макетом, который инициализируется в TestBase, не всегда вызывается. Решение заключается в использовании Mockito.lenient().when( context ), который был добавлен в более поздние версии Mockito.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...