Замена реализации трейта во время тестов в PlayFramework?

У меня есть трейт Config, который содержит кучу значений конфигурации.

У меня есть реализация этой черты по умолчанию, DefaultConfig , которая содержит производственные значения этих полей. Я использую @ImplementedBy( classOf[DefaultConfig] ) на Config, и в моих контроллерах он вводится как:

class SignupController @Inject()(cc: ControllerComponents, config: Config)

Все это работает до сих пор, но я хотел бы иметь другую реализацию Config, называемую TestConfig, которая содержит учетные данные для тестовой базы данных и т. д. Я бы хотел, чтобы во время тестов вводился TestConfig, а не DefaultConfig.

Любые идеи, как это можно сделать? Мои тесты простираются от PlaySpec with GuiceOneAppPerSuite with Injecting


person Ali    schedule 30.01.2018    source источник


Ответы (1)


Когда вы запускаете тестовое приложение, вы можете переопределить внедренный класс:

override lazy val app = new GuiceApplicationBuilder()
      .overrides(bind[Config].to[TestConfig])
      .build
person F. Lins    schedule 30.01.2018
comment
Следует ли переопределить GuiceFakeApplicationFactory::fakeApplication этим, или куда это должно идти? - person Andrey Tyukin; 30.01.2018
comment
да, я забыл переопределить, только что обновил ответ, вы можете просто поместить это в начало вашего тестового файла - person F. Lins; 30.01.2018
comment
Я также забыл вызов сборки - person F. Lins; 30.01.2018
comment
Я сделал это так, чтобы иметь базовый тестовый класс, который содержит именно эту строку ^, и все тесты наследуются от нее. Благодарю вас! - person Ali; 30.01.2018