zoukankan      html  css  js  c++  java
  • 单元测试之获取Spring下所有Bean

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

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

     1 import org.apache.log4j.Logger;
     2 import org.junit.AfterClass;
     3 import org.junit.Before;
     4 import org.junit.BeforeClass;
     5 import org.springframework.beans.factory.support.DefaultListableBeanFactory;
     6 import org.springframework.context.ApplicationContext;
     7 import org.springframework.context.support.ClassPathXmlApplicationContext;
     8 
     9 public abstract class BaseTest {
    10     protected Logger log = Logger.getLogger(this.getClass());
    11     protected static ApplicationContext appContext;
    12 
    13     @BeforeClass
    14     public static void setUp() throws Exception {
    15         try {
    16             long start = System.currentTimeMillis();
    17             System.out.println("正在加载配置文件...");
    18 
    19             appContext =  new ClassPathXmlApplicationContext(new String[]{"spring-config.xml","spring-config-struts.xml"});
    20 
    21             System.out.println("配置文件加载完毕,耗时:" + (System.currentTimeMillis() - start));
    22         } catch (Exception e) {
    23             e.printStackTrace();
    24         }
    25     }
    26 
    27     public static void main(String[] args) {
    28         System.out.println(BaseTest.class.getResource("/"));
    29     }
    30 
    31     protected boolean setProtected() {
    32         return false;
    33     }
    34 
    35     @Before
    36     public void autoSetBean() {
    37         appContext.getAutowireCapableBeanFactory().autowireBeanProperties(this, DefaultListableBeanFactory.AUTOWIRE_BY_NAME, false);
    38     }
    39 
    40     @AfterClass
    41     public static void tearDown() throws Exception {
    42     }
    43 }

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

    获取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。

  • 相关阅读:
    Bzoj 3173: [Tjoi2013]最长上升子序列 平衡树,Treap,二分,树的序遍历
    Bzoj 1657: [Usaco2006 Mar]Mooo 奶牛的歌声 单调栈
    Bzoj 1391: [Ceoi2008]order 网络流,最大权闭合图
    Bzoj 1674: [Usaco2005]Part Acquisition dijkstra,堆
    Bzoj 3110: [Zjoi2013]K大数查询 树套树
    Cogs 309. [USACO 3.2] 香甜的黄油 dijkstra,堆,最短路,floyd
    面试题24:二叉排序树的后序遍历序列
    面试题23:从上往下打印二叉树
    面试题22:栈的压入、弹出序列
    面试题21:包含min函数的栈
  • 原文地址:https://www.cnblogs.com/treerain/p/junit_spring_autowire_bean.html
Copyright © 2011-2022 走看看