다음 테스트는이 테스트 빈이 Spring에 의해 두 번 초기화됨을 보여줍니다. 나는 누군가가 나에게 이유가 무엇인지 말할 수 있기를 바라고있다.SpringJUnit4ClassRunner는 각 테스트에 대해 beans를 초기화합니까?
import org.apache.log4j.Logger;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {})
public class TestAfterPropsSet implements InitializingBean {
private static final Logger logger = Logger.getLogger(TestAfterPropsSet.class);
@Test
public void test1() {
logger.debug("Test1");
}
@Test
public void test2() {
logger.debug("Test2");
}
public void afterPropertiesSet() throws Exception {
logger.debug("Bean Initialized");
}
} // end class
다음은 빈 파일입니다 :
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
</beans>
을 여기에 출력입니다 : 여기에 테스트입니다
2009-10-13 21:20:04,393 [TestAfterPropsSet.java 26] DEBUG - Bean Initialized
2009-10-13 21:20:04,393 [TestAfterPropsSet.java 17] DEBUG - Test1
2009-10-13 21:20:04,393 [TestAfterPropsSet.java 26] DEBUG - Bean Initialized
2009-10-13 21:20:04,393 [TestAfterPropsSet.java 22] DEBUG - Test2
고지 : "implements InitializingBean"은 bean이됩니다. 적어도 나는 이름으로 생각한다. 그리고 내가 필드와 그곳에 그것을 들려 줄 수 있다는 사실. @BeforeClass의 문제점은 Spring이 테스트 클래스에 주입하기 전에 실행된다는 것이다. 테스트 리소스를 주입하기 때문에 종종 문제가됩니다. @Before와 같은 것도 주사 전에 실행되지만 모든 테스트마다 실행됩니다. 내가 찾은 최선의 방법은 InitiliazingBean 인터페이스의 afterPropertiesSet()을 사용하고 거기에 자원을 주입하는 데 필요한 모든 설정을 수행하는 것입니다. 내가 발견 한 문제는 각 테스트 전에 afterPropertiesSet이 실행된다는 점입니다. – harschware
그건 좀 더 의미가 있습니다. 형식을 포함하도록 편집되기 전에 나머지 코드를 잡아 내지 못했습니다. lazy-init = "true"를 사용하여 Spring을 BeanFactory를 사용하여 @BeforeClass 또는 @Before에서 요청시 인스턴스화 할 수 있다고 확신하지만 다시 초기화하지는 않습니다. 어쩌면 이것은 제 생각이지만, 코드 제약이 없으면 다시 초기화 할 때 문제가 있다고 생각하지 않습니다. – Droo
내 의견에 대한 정정 : "@bfore와 같은 것도 주사하기 전에 실행"이 사실이 아닙니다. 나는이 문제로 많은 변화가 있다고 생각하지 않습니다. – harschware