2016-11-04 3 views
0

단위 테스트 목적으로 조롱 된 Spring 컨텍스트를 만들려고합니다. 우리의 Spring Configuration은 꽤 크고 현재는 Spring + Springockito Annotations를 사용하여이 것을 얻으 려합니다.Java Spring : 여러 파일에서 Mocking Context

내가 발견 한 문제는 컨텍스트 만들기/조롱을 처리하는 여러 Java 클래스를 갖고 싶다는 것입니다. (

//declaring context classes below 
@ContextConfiguration(loader = SpringockitoAnnotatedContextLoader.class, 
     classes = { 
      ClassA.class, 
      ClassB.class, 
      SubClassCOne.class, 
      SubClassCTwo.class, 
      ... //list goes on and on with more mocks 
     } 
) 
public class Configurator { 
    @Autowired 
    ClassA classA; 

    @ReplaceWithMock 
    ClassB classB; 

    @Autowired 
    List<ClassC> classesC; 

    @Autowired 
    SubClassCOne subclassCOne; 

    .... 

문제는 C의 서브 클래스의 목록은 여기가하고 싶은 것보다 훨씬 더 큰 것입니다 : 지금이이 모양으로 (의는 클래스 A는 생성자의 인수로 ClassCs의 클래스 B와 목록을 소요 가정 해 봅시다)

ListProvider.java :

//THIS ANNOTATION WON'T BE TAKEN INTO ACCOUNT 
@ContextConfiguration(loader = SpringockitoAnnotatedContextLoader.class, 
     classes = { 
      SubClassCOne.class, 
      SubClassCTwo.class, 
      ... 
     } 
) 
public class ListProvider { 
    @Autowired 
    List<ClassC> classesC; 

    ... 
    public List<ClassC> getClassesC(){ 
     return classesC; 
    } 
    ... 

Configurator.java :하지 나는) 단 하나 개의 클래스에 모든 책임을두고있어 언급, 그래서 나는 다음과 같은 작품의 처리됩니다 다른 클래스의 생각

@ContextConfiguration(loader = SpringockitoAnnotatedContextLoader.class, 
     classes = { 
      ClassA.class, 
      ClassB.class, 
      ListProvider.class, 
      ... 
     } 
) 
public class Configurator { 
    @Autowired 
    ClassA classA; 

    @ReplaceWithMock 
    ClassB classB; 

    @Autowired 
    ListProvider listProvider 

    @Autowired //probably not autowired anymore? 
    List<ClassC> classesC; 

    ... 
    //then somewhere it'll take classesC from listProvider using getter? 

그러나 문제는 ListProvider가 제대로 autowire가된다하더라도, 그것은 @ContextConfiguration 클래스를 사용하지 않습니다 내가 정확히 어떤 Configurator.java 모든 것을 제공하지 않습니다하지 않는 한 어떤 ClassC의 서브 클래스를 찾을 것입니다 온다 나는 피하고 싶습니다.

이 컨텍스트 구성을 여러 파일로 분할하는 변경 사항이 있습니까?

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(classes=MainConfig .class) 
@ActiveProfiles("test") 
public class ATest { 

그래서 테스트가 모든 시간에 MainConfig을 선택할 것입니다

@Configuration 
@ComponentScan(basePackages = "com.greg") 
public class MainConfig { 
} 

@Configuration 
@Profile("test") 
public class TestConfig { 
} 

그런 다음 테스트 프로필을 사용하여 테스트를 실행 만됩니다

답변

0

기본 및 시험 사용하여 프로파일로 설정을 분리 프로파일이 테스트로 설정되면 TestConfig를 선택하십시오. @Profile은 또한 어떤 빈이 스캔에로드되었는지를 구별하는데 사용될 수있다.

관련 문제