0

수동 종속성 주입과 함께 프로젝트가 있습니다. 표준 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

용어 컴파일 시간 의존성 주입 수율 훨씬 더 많은 결과 다음 수동 의존성 주입을 사용 :

답변

0

이 예는 내 모든 질문에 대답했다.