2015-01-28 1 views
0

여러 개의 전체 응용 프로그램 컨텍스트가있는 대신 컨텍스트가 달라야하는 내용의 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 사용 일부 통찰력을 제공 할 수 있다면 기쁠 것입니다.

[1] http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#testcontext-ctx-management-ctx-hierarchies

답변

0

그 주석이 스프링의 JUnit 러너에 의해 처리된다 @RunWith(SpringJUnit4ClassRunner.class); 표준 junit 테스트 (스칼라로)를 작성하고 해당 러너를 사용하면 작동합니다. 이 봄 물건으로 scalatest를 사용하고 싶다면 스프링 러너가 할 일과 scalatest 주자가 할 일을 모두 호출하는 자신의 러너를 작성해야 할 것입니다.

+0

감사합니다.하지만 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