2015-08-14 1 views
0

У меня есть TestModule, который выполняет несколько привязок для моих модульных тестов, например. он заменяет классы доступа для внешних систем с патрубками:Как повторно включить привязку по умолчанию в переопределении

bind(ExternalSystemAccessor.class).to(ExternalSystemAccessorStub.class).in(Singleton.class); 

Теперь один из моих тестов необходимо использовать продуктивную реализацию, поэтому я попытался связать его обратно по умолчанию с переопределением:

injector = Guice.createInjector(Modules.override(new TestModule()).with(new AbstractModule() { 
    @Override 
    protected void configure() { 
     bind(ExternalSystemAccessor.class).to(ExternalSystemAccessor.class); 
    } 
})); 

Однако , это приводит к ошибке Guice:

com.google.inject.CreationException: Guice creation errors: 

1) Binding points to itself. 

Так как я могу вернуться к привязке по умолчанию с переопределением?

+0

Не является прямым ответом на ваш вопрос, но как общее правило, лучше избегать 'Modules.override' всякий раз, когда это возможно. Вместо этого вы должны реорганизовать свои модули, чтобы вы могли писать тесты, просто не устанавливая привязки к продукции, а не путем установки и последующего их переопределения. У меня часто будет открытый модуль, который просто устанавливает кучу пакетов-частных модулей, что позволяет мне устанавливать разные подмножества модулей для тестов. –

+0

Я не переопределяю производственную привязку, но проверяю привязку. – oberlies

+0

Тем более не рекомендуется использовать 'Modules.override'. Просто заставьте свой тестовый модуль не устанавливать эту привязку, если вы хотите ее самостоятельно поставить. –

ответ

0

Только что нашел ответ, набрав вопрос. Решение состоит в том, чтобы опустить to метод:

@Override 
protected void configure() { 
    bind(ExternalSystemAccessor.class); // re-enable default binding 
} 
Смежные вопросы