수동 종속성 주입과 함께 프로젝트가 있습니다. 표준 Play 테스트 스위트로 내 애플리케이션을 테스트 할 수 있습니까? 이제 테스트를 들면 = "가 AppLoader"수동 종속성 주입 응용 프로그램 테스트 2.5.x
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)
play.application.loader은 매우 간단
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 대신 ApplicationTest 클래스 내부 Guice 메커니즘을 사용해야합니다. Application controlle r에 종속성이 있습니다 (cacheApi, dbApi ...)
route 메소드는 응용 프로그램을 인수로 사용할 수 있지만 어떻게 AppLoader 클래스를 수동으로 인스턴스화 할 수있는 컨텍스트를 얻을 수 있습니까? Scala 권고안에 초보자가 가장 환영 받는다.
https://github.com/playframework/play-scala-compile-di-with-tests
용어 컴파일 시간 의존성 주입 수율 훨씬 더 많은 결과 다음 수동 의존성 주입을 사용 :