복붙노트

[SPRING] RunWith 및 ContextConfiguration 이상한 동작

SPRING

RunWith 및 ContextConfiguration 이상한 동작

저는이 아주 간단한 수업을 가지고 있습니다 :

 @RunWith(SpringJUnit4ClassRunner.class)
 @ContextConfiguration(locations={"classpath*:/application-context-this-does-not-exist.xml"})
  public class HTMLSourceExtractorImplTest {

    @Autowired
    ApplicationContext context;

    @Test
    public void test(){
         String [] beans = context.getBeanDefinitionNames();
             for(String bean : beans){
                 System.out.println(bean);
             }
         System.out.println("Testing");
    }
}

classpath에 지정된이 컨텍스트 파일이 존재하지 않습니다. 나는 원하는 모든 이름을 넣을 수 있고 코드는 깨지지 않는다. 나는 그 파일이 실제로 존재하는 것처럼 테스트가 잘 진행됨을 의미합니다.

classpath *에서 classpath로 조금 변경하면이 파일이 존재하지 않는다고 말하며 이는 첫 번째 경우에도 기대했던 동작입니다.

Spring Version 3.2.3.RELEASE.

누군가가이 이상한 행동을 설명 할 수 있습니까?

편집하다

제안 된 로그의 내용 :

     20:47:26,923 INFO  [GenericApplicationContext] Refreshing org.springframework.context.support.GenericApplicationContext@3df6c65c: startup date [Fri Jun 07 20:47:26 PDT 2013]; root of context hierarchy

나는 심지어 애플리케이션 컨텍스트에서 모든 빈을 출력하려고 시도했다.

  org.springframework.context.annotation.internalConfigurationAnnotationProcessor
  org.springframework.context.annotation.internalAutowiredAnnotationProcessor
  org.springframework.context.annotation.internalRequiredAnnotationProcessor
  org.springframework.context.annotation.internalCommonAnnotationProcessor                   
  org.springframework.context.annotation.ConfigurationClassProcessor.importAwareProcessor

와일드 카드의 경우, Spring은 기본 빈 Application Context를 생성 할 것입니다.

해결법

  1. ==============================

    1.JavaDoc의 견적은 아마 당신의 질문에 답할 것입니다 :

    JavaDoc의 견적은 아마 당신의 질문에 답할 것입니다 :

    /**
     * Pseudo URL prefix for all matching resources from the class path: "classpath*:"
     * This differs from ResourceLoader's classpath URL prefix in that it
     * retrieves all matching resources for a given name (e.g. "/beans.xml"),
     * for example in the root of all deployed JAR files.
     * @see org.springframework.core.io.ResourceLoader#CLASSPATH_URL_PREFIX
     */
    String CLASSPATH_ALL_URL_PREFIX = "classpath*:";
    

    classpath에 application-context-this-does-not-exist.xml이라는 이름의 XML 파일이 없으므로 @ContextConfiguration (locations = {}) => 빈 응용 프로그램 컨텍스트와 구성이 동일합니다.

    그러나 CLASSPATH_URL_PREFIX = "classpath :"를 사용하면 "존재하지 않는 파일로드"=> 컨텍스트 구성로드 오류가 발생합니다.

  2. from https://stackoverflow.com/questions/16985770/runwith-and-contextconfiguration-weird-behaviour by cc-by-sa and MIT license