У меня есть проект с ручной инъекцией зависимости. Могу ли я проверить свое приложение со стандартным набором тестов Play?Инспекция приложения Injection Injection Play 2.5.x
play.application.loader = "Apploader"
class AppLoader extends ApplicationLoader {
override def load(context: Context): Application = {
LoggerConfigurator(context.environment.classLoader).foreach(_.configure(context.environment))
new AppComponents(context).application
}
}
}
class AppComponents(context: Context) extends BuiltInComponentsFromContext(context) with EhCacheComponents with EvolutionsComponents with DBComponents with HikariCPComponents{
lazy val applicationController = new controllers.Application(defaultCacheApi, dbApi.database("default"))
lazy val usersController = new controllers.Users(defaultCacheApi)
lazy val assets = new controllers.Assets(httpErrorHandler)
//applicationEvolutions
// Routes is a generated class
override def router: Router = new Routes(httpErrorHandler, applicationController, usersController, assets)
Для теста теперь очень просто
class ApplicationTest extends PlaySpec with OneAppPerTest {
"Application" must {
"send 404 on a bad request" in {
route(FakeRequest(GET, "/boum")) mustBe None
}
}
}
Тест заканчивается с ошибкой:
Could not find a suitable constructor in controllers.Application. Classes must have either one (and only one) constructor annotated with @Inject or a zero-argument
Я полагаю, мне нужно как-то использовать мой AppLoader вместо defualt Guis mechanisam внутри класса ApplicationTest, потому что Application controlle r имеет зависимость (cacheApi, dbApi ...)
Метод маршрута может принимать приложение как аргумент, но как я могу получить контекст для ручного создания класса AppLoader? Новичка в рекомендациях Scala приветствуется.