单元测试之获取Spring下所有Bean

时间:2023-03-10 06:39:55
单元测试之获取Spring下所有Bean

单元测试中,针对接口的测试是必须的,但是如何非常方便的获取Spring注册的Bean呢?

如果可以获取所有的Bean,这样就可以将这个方法放到基类中,方便后面所有单元测试类的使用,具体实现如下:

 import org.apache.log4j.Logger;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.springframework.beans.factory.support.DefaultListableBeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; public abstract class BaseTest {
protected Logger log = Logger.getLogger(this.getClass());
protected static ApplicationContext appContext; @BeforeClass
public static void setUp() throws Exception {
try {
long start = System.currentTimeMillis();
System.out.println("正在加载配置文件..."); appContext = new ClassPathXmlApplicationContext(new String[]{"spring-config.xml","spring-config-struts.xml"}); System.out.println("配置文件加载完毕,耗时:" + (System.currentTimeMillis() - start));
} catch (Exception e) {
e.printStackTrace();
}
} public static void main(String[] args) {
System.out.println(BaseTest.class.getResource("/"));
} protected boolean setProtected() {
return false;
} @Before
public void autoSetBean() {
appContext.getAutowireCapableBeanFactory().autowireBeanProperties(this, DefaultListableBeanFactory.AUTOWIRE_BY_NAME, false);
} @AfterClass
public static void tearDown() throws Exception {
}
}

这样后面单元测试的类就可以继承自该类来使用,方便快捷。

获取Spring下所有Bean的关键在于首先指定Spring配置文件的路径:

ApplicationContext appContext =  new ClassPathXmlApplicationContext(new String[]{"spring config path"});

然后通过appContext来获取注入的Bean:

appContext.getAutowireCapableBeanFactory().autowireBeanProperties(this, DefaultListableBeanFactory.AUTOWIRE_BY_NAME, false);

当然这里需要利用JUnit的@Before,在执行前操作获取Bean。