使用spring boot+junit測(cè)試[web工程中使用spring配置中心]的測(cè)試用例

首先web工程一般的啟動(dòng)方式是web容器,如tomcat,jetty。然后由于使用了spring的配置中心,你需要指定幾個(gè)jvm options參數(shù)來(lái)指定配置中心的git地址以及分支等。但是為了方便測(cè)試,為了不用每次測(cè)試都啟用tomcat,于是想到使用Junit測(cè)試用例
于是想到普通web項(xiàng)目的測(cè)試用例的寫(xiě)法如下:

@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@ContextConfiguration(locations = {"classpath:spring-servlet.xml","classpath:spring-common.xml"})
public class SpringWebJunitTest {

    @Autowired
    private IItemsService itemsService;

    @Test
    public void test() {
        itemsService.queryItemsByClasscode("ddd");
        System.out.println("hello world");
    }
}

然后在在classpath下面加入bootstrap.properties內(nèi)容如下:

spring.cloud.config.uri=http://localhost:9010 #指定git倉(cāng)庫(kù)地址
spring.cloud.config.name=database,business,component #指定配置文件的名稱(chēng)
spring.cloud.config.profile=dev #指定profile的類(lèi)型,test,dev,prod等
spring.cloud.config.label=dev #指定git的分支

但是報(bào)dataSource的數(shù)據(jù)源初始化失?。〝?shù)據(jù)庫(kù)鏈接配置在spring的配置中心)

2017-01-11 17:50:29 [INFO] [org.springframework.beans.factory.xml.XmlBeanDefinitionReader:317] - Loading XML bean definitions from class path resource [spring-common.xml]
2017-01-11 17:50:29 [INFO] [org.springframework.context.support.AbstractApplicationContext:578] - Refreshing org.springframework.web.context.support.GenericWebApplicationContext@63676602: startup date [Wed Jan 11 17:50:29 GMT+08:00 2017]; root of context hierarchy
[17:50:30|INFO |(com.alibaba.druid.pool.DruidDataSource)]=[{dataSource-1} inited]

從日志可以看出這是因?yàn)槌跏蓟?code>sprint-common.xml失敗,然后想到是因?yàn)榧虞d不到spring配置中心
然后想是因?yàn)槲业腷ootstrap.properties不起作用嗎,試試用jvm options 制定參數(shù)呢
為測(cè)試用例添加jvm options:

-Dspring.cloud.config.uri=http://localhost:9010 #指定git倉(cāng)庫(kù)地址
-Dspring.cloud.config.name=database,business,component #指定配置文件的名稱(chēng)
-Dspring.cloud.config.profile=dev #指定profile的類(lèi)型,test,dev,prod等
-Dspring.cloud.config.label=dev #指定git的分支

如圖:

Paste_Image.png

結(jié)果報(bào)了一模一樣的錯(cuò)誤,這是意識(shí)到是這兩種方式得知配置中心的方法是無(wú)效的,于是想想肯定有人和我一樣遇到類(lèi)似的坑吧,結(jié)果google了半天無(wú)果,無(wú)奈啊~

起身上了個(gè)廁所回來(lái)一想,spring boot 方式不是能正常加載到spring的配置中心嗎,用junit也能正常跑起來(lái),為什么換成web酒跑步起來(lái)呢。為了達(dá)到測(cè)試用例效果,擺了
就用junit 結(jié)合spring boot來(lái)啟用web項(xiàng)目并加載配置中心吧,抱著還不行就不管了的心態(tài)試了試。以下是配置過(guò)程。

在項(xiàng)目pom.xml中加入spring boot 啟動(dòng)web項(xiàng)目的支持

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <scope>test</scope>
        </dependency>
  1. 新建Spring boot啟動(dòng)類(lèi)Application類(lèi)
@Configuration
@EnableAutoConfiguration
@ComponentScan
@ImportResource({"classpath:spring-servlet.xml","classpath:spring-common.xml"})
public class SprintBootTestApplication extends WebMvcConfigurerAdapter {

    public static void main(String[] args) {
        ApplicationContext ctx = SpringApplication.run(SprintBootTestApplication.class);
        System.out.println("spring boot start success.");
    }
}
  1. 新建junit測(cè)試類(lèi)型來(lái)運(yùn)行Spring boot 啟動(dòng)類(lèi)
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = SprintBootTestApplication.class)
@WebAppConfiguration
public class BaseTest {

    @Resource(name="testService")
    public TestService testService;

    @Test
    public void test(){
        testService.sayHello("world");
        System.out.println("finish!!!");
    }
}

測(cè)試運(yùn)行,果然可以。不知道為什么單純的使用測(cè)試用例不能使用spring配置中心配置,如果哪位大俠有更好的方法,能夠分享下讓我學(xué)習(xí)學(xué)習(xí)啊

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容