程序员

使用spring boot+junit测试[web工程中使用sp

2017-01-11  本文已影响0人  okeeper

首先web工程一般的启动方式是web容器,如tomcat,jetty。然后由于使用了spring的配置中心,你需要指定几个jvm options参数来指定配置中心的git地址以及分支等。但是为了方便测试,为了不用每次测试都启用tomcat,于是想到使用Junit测试用例
于是想到普通web项目的测试用例的写法如下:

@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内容如下:

spring.cloud.config.uri=http://localhost:9010 #指定git仓库地址
spring.cloud.config.name=database,business,component #指定配置文件的名称
spring.cloud.config.profile=dev #指定profile的类型,test,dev,prod等
spring.cloud.config.label=dev #指定git的分支

但是报dataSource的数据源初始化失败(数据库链接配置在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]

从日志可以看出这是因为初始化sprint-common.xml失败,然后想到是因为加载不到spring配置中心
然后想是因为我的bootstrap.properties不起作用吗,试试用jvm options 制定参数呢
为测试用例添加jvm options:

-Dspring.cloud.config.uri=http://localhost:9010 #指定git仓库地址
-Dspring.cloud.config.name=database,business,component #指定配置文件的名称
-Dspring.cloud.config.profile=dev #指定profile的类型,test,dev,prod等
-Dspring.cloud.config.label=dev #指定git的分支

如图:

Paste_Image.png

结果报了一模一样的错误,这是意识到是这两种方式得知配置中心的方法是无效的,于是想想肯定有人和我一样遇到类似的坑吧,结果google了半天无果,无奈啊~

起身上了个厕所回来一想,spring boot 方式不是能正常加载到spring的配置中心吗,用junit也能正常跑起来,为什么换成web酒跑步起来呢。为了达到测试用例效果,摆了
就用junit 结合spring boot来启用web项目并加载配置中心吧,抱着还不行就不管了的心态试了试。以下是配置过程。

在项目pom.xml中加入spring boot 启动web项目的支持

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <scope>test</scope>
        </dependency>
  1. 新建Spring boot启动类Application类
@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测试类型来运行Spring boot 启动类
@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!!!");
    }
}

测试运行,果然可以。不知道为什么单纯的使用测试用例不能使用spring配置中心配置,如果哪位大侠有更好的方法,能够分享下让我学习学习啊

上一篇下一篇

猜你喜欢

热点阅读