解决junit获取注入bean问题

解决junit获取注入bean问题:

注解引入多个配置文件情况:

我们使用spring写junit单测的时候,有的时候我们的spring配置文件只有一个。我们在类的注释上面会这样写:

@RunWith(SpringJUnit4ClassRunner.class)  
@ContextConfiguration(locations = "classpath*:spring-ctx-application.xml")  

 但有的时候我们的项目很复杂,其中的spring配置文件被拆分成了多个,这样该如何写上面这段单测代码而引入多个配置文件呢?如下:

@RunWith(SpringJUnit4ClassRunner.class)  
@ContextConfiguration(locations = { "classpath*:spring-ctx-application.xml",  
        "classpath*:spring-ctx-consumer.xml" })  

 这样就可以轻松的引入多个spring的配置文件了。

或者配置符合某一个正则表达式的一类文件,如:

@RunWith(SpringJUnit4ClassRunner.class)  
@ContextConfiguration(locations = "classpath*:spring-ctx-*.xml")  
 
@Test有这个注解即可立即运行
 
可能有些当时web运行的注入方式可以,但是测试junit就有问题,可以注了或改写,或把一些不严格的格式配置文件按格式重写
 
例如
ehcache-shiro.xml:之前没有写命名空间不严格测试junit出现ehcache不可识别
<?xml version="1.0" encoding="UTF-8"?>
<ehcache updateCheck="false" name="shiroCacheLiCai" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd">
    <!--
        timeToIdleSeconds 当缓存闲置n秒后销毁 为了保障会调用ShiroSessionDao的doReadSession方法,所以不配置该属性
        timeToLiveSeconds 当缓存存活n秒后销毁 必须比Redis中过期时间短
    -->
<defaultCache
maxElementsInMemory="10000"
eternal="false"
timeToLiveSeconds="3600"
overflowToDisk="false"
diskPersistent="false"
diskExpiryThreadIntervalSeconds="10"
/>
</ehcache>
 
 
示例:

解决junit获取注入bean问题
 
 
 
注意:把java/mian/test设置成test目录才可以引入以下注解

解决junit获取注入bean问题
 
 
import com.alibaba.dubbo.config.annotation.Reference;
import com.alibaba.fastjson.JSON;
import com.houbank.basic.util.page.Pagination;
import com.houbank.incoming.api.CacheFacade;
import com.houbank.incoming.api.FinancialSalesUserFacade;
import com.houbank.incoming.model.condition.FinancialSalesUserCondition;
import com.houbank.incoming.web.controller.FinancialSalesUserController;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.util.Base64Utils;
import org.springframework.web.client.RestTemplate;

import javax.annotation.Resource;
import java.io.UnsupportedEncodingException;

/**
 * Created by winner_0715 on 2017/1/7.
 */
@RunWith(SpringJUnit4ClassRunner.class) //使用junit4进行测试
@ContextConfiguration(locations={"classpath*:spring/applicationContext.xml","classpath*:spring/ehcache-shiro.xml"}) //加载配置文件
public class TestGet {

    @Autowired
    private CacheFacade cacheFacade;

    @Autowired
    private RestTemplate restTemplate1;

    @Before
    public void setUp() throws Exception {
    }

    @After
    public void tearDown() throws Exception {
    }

    /**
     * 要请求的url,一般放在配置文件中
     */
//    @Value(value = "@{remote.url}")
private String remoteUrl;

    @Test
    public void postRemoteData() throws UnsupportedEncodingException {
        /**
         * 设置请求头
         */
HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.parseMediaType("application/json;charset=UTF-8"));
        headers.add("Accuept", MediaType.APPLICATION_JSON.toString());

        /**
         * POST请求参数,根据需要进行封装
         */
String bodyData = "";//new String(Base64Utils.encode(JSON.toJSONString(ro).getBytes("UTF-8")));
        /**
         * 查看HttpEntity的构造方法,包含只有请求头和只有请求体的情况
         */
HttpEntity<String> httpEntity = new HttpEntity<String>(bodyData, headers);

        /**
         * 执行操作
         */
FinancialSalesUserCondition cd = new FinancialSalesUserCondition();
        remoteUrl="http://localhost:8080/hb_phonebank_web/financialSalesUser/listPage";
//        getweixinBaseInfoList();
ResponseEntity<Pagination> result = restTemplate1.postForEntity(remoteUrl,cd,Pagination.class);

    }

    /**
     * 模拟请求参数
     */
private class ParameterRo {

        private Integer id = 123;

        public Integer getId() {
            return id;
        }

        public void setId(Integer id) {
            this.id = id;
        }
    }
    public RestTemplate getRestTemplate1() {
        return restTemplate1;
    }

    public void setRestTemplate1(RestTemplate restTemplate1) {
        this.restTemplate1 = restTemplate1;
    }


    public String getRemoteUrl() {
        return remoteUrl;
    }

    public void setRemoteUrl(String remoteUrl) {
        this.remoteUrl = remoteUrl;
    }
}
 
 
 
 
 

相关推荐