다중 프로젝트의 SBT 테스트 종속성 : 종속 프로젝트에서 테스트 코드를 사용할 수 있도록 설정


83

일부 프로젝트가 서로 종속성이있는 SBT 다중 프로젝트가 있습니다. 이렇게 :

 lazy val coreProject: Project = Project(
    id = "core-project",
    base = file("./core-project"),
    // other stuff
    ))

  lazy val extensions: Project = Project(
    id = "extensions",
    base = file("./extensions"),
    dependencies = Seq(coreProject)
  )

이제 테스트 폴더의 '핵심'프로젝트에 테스트 코드가 있습니다. 모의 및 테스트 유틸리티와 같은 것도 있습니다. 이제 확장 테스트에서 이러한 테스트 유틸리티를 사용하고 싶습니다. 프로덕션 코드의 경우 종속성을 선언했기 때문에 작동합니다. 그러나 종속성이 테스트에 적용되지 않는 것 같습니다. 테스트를 실행할 때 누락 된 클래스에 대한 컴파일 오류가 발생합니다. 이러한 클래스는 핵심 프로젝트의 테스트 코드에서 가져온 것입니다.

종속성이 테스트 범위에 대한 테스트 코드도 포함해야한다고 sbt에 어떻게 알릴 수 있습니까? 그래서 '확장'프로젝트의 테스트 코드에서 모의를 재사용 할 수 있습니까?

답변:


92

이렇게 :

dependencies = Seq(coreProject % "compile->compile;test->test")

이는 Getting-Started-Multi-Project 가이드의 "Per-configuration classpath dependencies"섹션에서 설명합니다 .


1
다른 사람들이 여기서 혼동하지 않도록 이것은 프로젝트 정의 (라이브러리 종속성이 아님)에서 종속성을 설정하는 것을 제안합니다.
Ryan Gross

비 SBT 닌자의 경우 빌드 파일을 더 많이 보여 주시겠습니까? 같은 정의 lazy val foo = project.settings(...).dependencies(Seq(bar % "compile->compile;test->test"))가 작동하지 않습니다. @RyanGross, 당신은?
Abhijit Sarkar

45

.dependsOn(coreProject % "compile->compile;test->test")초기 프로젝트 선언 이후에도 이를 수행 할 수 있습니다 .

lazy val coreProject = Project("core-project")
lazy val extensions = Project("extensions").dependsOn(coreProject % "compile->compile;test->test")

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.