여러 개의 전체 응용 프로그램 컨텍스트가있는 대신 컨텍스트가 달라야하는 내용의 99 %를 붙여 넣고 추가/제거하면 오히려 하나의 상위 컨텍스트 즉 "rootContext.xml"에 모든 일반 항목이 있습니다. 다른 모든 것은 하위 컨텍스트의 일부이며 상위 컨텍스트로 병합되거나 대체됩니다.다단계 테스트 클래스 계층 구조에서 Spring @ContextHierarchy (Scala와 ScalaTest 사용)
[1]은 @ContextHierarchy를 설정하고 단위 테스트 클래스 계층을 사용해야하는 모든 것을 설명합니다. 하지만 작동하지 않습니다. 첫째
내 클래스 계층 구조 :
@RunWith(classOf[JUnitRunner])
@ContextHierarchy(value = Array(new ContextConfiguration(locations = Array("classpath:/rootTestContext.xml"), name = "root")))
class TestBase extends FunSuite {...}
@ContextHierarchy(value = Array(new ContextConfiguration(locations = Array("classpath:/persistenceTestContext.xml"), name = "root", ???inheritLocations = false???)))
class PersistenceTestBase extends TestBase {...}
class BasicTest extends TestBase {
test("blah") { ... }
}
class NeedsExtraContextForPersistenceTest extends PersistenceTestBase {
test("persist!") { ... }
}
스프링 애플리케이션 컨텍스트 파일 :
rootTestContext.xml:
<import resource="classpath:/configfiles/spring/genericCaching.xml"/>
<context:annotation-config/>
<context:component-scan base-package="my.package.cm" />
<context:component-scan base-package="my.package.package2.cm" />
persistenceTestContext.xml:
<import resource="classpath:/configfiles/spring/persistence.xml"/>
그래서 persistenceTestContext.xml가 parentContext에 한 줄을 추가해야합니다. 거기에 있던 일반적인 물건은 이제 rootTestContect.xml에 있습니다. 그러나 NeedsExtraContextForPersistenceTest 스프링의 구성 요소 스캐너를 실행할 때 자동 와이어 링을위한 스프링 빈을 선택하지 않습니다. 상위 컨텍스트에서 정의 된 스캐너가 효과가없는 것처럼 보입니다. 이 방법을 명확하게하기 위해 @ContextConfiguration을 통한 표준 방법과 스캐너 설정을 포함하는 완전한 persistenceTestContext.xml을 사용할 때 테스트를 실행하는 데 아무런 문제가 없습니다.
테스트 계층을 사용하는 예는 매우 적기 때문에 Scala + ScalaTest를 사용하여 @ContextHierarchy 및 none 사용 일부 통찰력을 제공 할 수 있다면 기쁠 것입니다.
감사합니다.하지만 ScalaTest와 함께 제공되는 JUnitRunner는 Spring의 최상위에서 실행됩니다. http://stackoverflow.com/questions/6282471/how-do-i-integrate-scalatest-with-spring을 살펴보십시오. 나는 "new TestContextManager (this.getClass()). prepareTestInstance (this)"를 추가해야만했다. 기본 클래스에 을 추가하면된다. 그래서 그들은 교장으로 따라갑니다. 내가 말했듯이 믹스에 @ConfigurationContext를 도입 할 때 문제가 시작됩니다. 그래서 어쩌면이 일을 끝낼 수있는 방법이 여전히있을 것입니다 (주자의 re-impl과 함께) – simou