2013-03-25 4 views
0

봄에 주입 의존성을 테스트하고 싶습니다.통합 테스트 : Autowired 주석을 테스트하십시오.

public SomeClass { 
    @Autowired 
    SomeBean bean ; 
    public SomeBean getBean(){ 
    return this.bean ; 
    } 
} 

나는이 같은 테스트를 원하는 :

나는 클래스가

public SomeClassTest { 
    SomeClass someClass ; 
    @Before 
    public void setUp(){ 
    someClass = new SomeClass() ; 
    }        
    @Test public testBeanWired(){ 
    assertNotNull(someClass.getBean()) ;             
    }       
} 

내가 테스트 구성 파일로 ContextConfiguration과 시도를하지만 테스트가 실패, 난 돈 ' 테스트에서 @Autowired를 사용하고 싶습니다. 클래스의 인스턴스를 만들고 bean이 자동으로 autowired됩니다.

답변

3

빈이 @Configuration으로 주석되고 바이트 코드가 인스트루먼트 된 경우에만 가능합니다. 그렇지 않으면, Spring에 의해 생성 된 bean 만 autowired된다. new을 사용하여 만든 콩이 아닙니다. Spring은 당신이 객체를 생성했다는 것을 알 수 없기 때문에 객체에 의존성을 주입해야한다.

이것은 종속성 주입의 기본 원칙입니다. 개체는 인스턴스가 생성되어 사용자가 아닌 컨테이너에 의해 주입됩니다.

+0

제가 테스트하고 싶은 것은 컨테이너가 그 일을하고있는 것입니까? 나는 내 테스트를위한 컨텍스트 설정 파일을 가지고 있는데, 여기서 빈은 선언된다. 테스트 할 때 내 클래스가 인스턴스화 될 때, 주입 될 빈을 원한다. – elaich

+1

컨테이너의 작업은 컨테이너가 인스턴스화하는 빈을 autowire하는 것이다. 인스턴스화하는 bean을 autowire하는 경우 테스트 중입니다. 따라서 테스트가 실패합니다. 컨테이너가 작업을 수행하지 않기 때문에가 아니라 Spring 컨텍스트에서 bean 인스턴스를 가져 오는 대신 new를 사용하기 때문이다. –

+0

mmmmm 맞습니다. 그래서'@Autowired SomeClass someClass'를 표시해야합니다. 그러면 테스트가 통과하고 그렇습니다. – elaich

관련 문제