前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SpringFramework之mvc controller的单元测试

SpringFramework之mvc controller的单元测试

作者头像
克虏伯
发布2019-04-15 10:13:53
4950
发布2019-04-15 10:13:53
举报
文章被收录于专栏:软件开发-青出于蓝

    项目里面经常会将controller的扫描配置与其它的分开以便于管理开发,但是controller的bean是在webApplicationContext中,与web容器结合起来,怎么单元测试时该怎么做呢?

1、手动创建webApplicationContext

    如下List-1.1所示,手动创建XmlWebApplicationContext,并指定xml路径

List-1.1

代码语言:javascript
复制
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.mock.web.MockRequestDispatcher;
import org.springframework.mock.web.MockServletContext;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.XmlWebApplicationContext;

@Configuration
public class WebApplicationContextConfiguration implements ApplicationContextAware {
    private ApplicationContext applicationContext;

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        this.applicationContext = applicationContext;
    }

    @Bean
    public WebApplicationContext getBean() {
        MockServletContext servletContext = new MockServletContext();
        servletContext.setMajorVersion(2);
        servletContext.setMinorVersion(4);
        servletContext.setContextPath("");
        XmlWebApplicationContext webApplicationContext = new XmlWebApplicationContext();
        webApplicationContext.setConfigLocation("classpath*:spring-mvc.xml");
        servletContext.registerNamedDispatcher("default", new MockRequestDispatcher("default"));
        webApplicationContext.setServletContext(servletContext);
        webApplicationContext.setParent(applicationContext);
        webApplicationContext.refresh();
        return webApplicationContext;
    }
}

2、建测试基类

    如下List-2.1所示

List-2.1

代码语言:javascript
复制
import org.junit.runner.RunWith;
import org.springframework.test.context.ActiveProfiles;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath*:spring-context.xml", "classpath*:spring-db.xml"})
public class TestBase {

}

3、样例   

    如下List-3.1所示,拿到webApplicationContext,就可以做controller的单元测试了。

List-3.1

代码语言:javascript
复制
import org.junit.Assert;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.mvc.condition.PatternsRequestCondition;
import org.springframework.web.servlet.mvc.method.RequestMappingInfo;
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping;

public class TestController extends TestBase {
    private static final Logger LOGGER = LoggerFactory.getLogger(TestController.class);
    @Autowired(required = true)
    private WebApplicationContext webApplicationContext;

    @Test
    public void test() {
        Assert.assertNotNull(webApplicationContext);
    }

(adsbygoogle = window.adsbygoogle || []).push({});

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、手动创建webApplicationContext
  • 2、建测试基类
  • 3、样例   
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档