新人上路-搭建项目-springweb-controller测试

maven和gradle配置

  • 测试controller最基本的依赖

    • maven

      <!-- main framework begin --><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>${spring.version}</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>${jackson.version}</version></dependency><!-- main framework end --><!-- web begin --><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.1.0</version><scope>provided</scope></dependency><!-- web end --><!-- test begin --><dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>${spring.version}</version><scope>test</scope></dependency><dependency><groupId>org.mockito</groupId><artifactId>mockito-core</artifactId><version>${mockito.version}</version><scope>test</scope></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>${junit.version}</version><scope>test</scope></dependency><!-- test end -->
      
    • gradle

    dependencies {compile("org.springframework.boot:spring-boot-starter-web")compile("org.springframework.boot:spring-boot-devtools")testCompile("org.springframework.boot:spring-boot-starter-test")testCompile("org.mockito:mockito-core:$mockitoVersion")
    }

springmvc javaconfig配置

  • WebAppInitializer

    public class WebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {protected Class<?>[] getRootConfigClasses() {return new Class<?>[]{ RootConfig.class };}protected Class<?>[] getServletConfigClasses() {return new Class<?>[]{ WebConfig.class };}protected String[] getServletMappings() {return new String[]{"/"};}/** 添加字符集过滤器 **/@Overridepublic void onStartup(ServletContext servletContext) throws ServletException {super.onStartup(servletContext);servletContext.addFilter("characterEncodingFilter",new CharacterEncodingFilter("utf-8", true)).addMappingForUrlPatterns(null, false, "/*");}
    }
  • WebConfig

    @Configuration
    @EnableWebMvc
    @ComponentScan("com.seal_de.controller")
    public class WebConfig extends WebMvcConfigurerAdapter {/** 解析json返回数据 **/@Overridepublic void configureMessageConverters(List<HttpMessageConverter<?>> converters) {MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();List<MediaType> mediaTypes = new ArrayList(converter.getSupportedMediaTypes());mediaTypes.addAll(Arrays.asList(MediaType.TEXT_PLAIN, MediaType.TEXT_HTML, MediaType.TEXT_XML));converter.setSupportedMediaTypes(mediaTypes);ObjectMapper objectMapper = converter.getObjectMapper();objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));converters.add(converter);}/** 静态资源不做处理 **/@Overridepublic void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {configurer.enable();}
    }
  • RootConfig

    @Configuration
    @ComponentScan(basePackages = {"com.seal_de"},excludeFilters={@ComponentScan.Filter(type= FilterType.ANNOTATION, value= EnableWebMvc.class)})
    public class RootConfig {
    }

springboot javaconfig

  • WebConfig

    @Configuration
    public class WebConfig extends WebMvcConfigurerAdapter {@Beanpublic ResourceBundleMessageSource messageSource() {ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();messageSource.setBasename("messages");messageSource.setDefaultEncoding("UTF-8");return messageSource;}/**解析json返回数据**/@Overridepublic void configureMessageConverters(List<HttpMessageConverter<?>> converters) {MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();List<MediaType> mediaTypes = new ArrayList(converter.getSupportedMediaTypes());converter.setSupportedMediaTypes(mediaTypes);mediaTypes.addAll(Arrays.asList(MediaType.TEXT_PLAIN, MediaType.TEXT_HTML, MediaType.TEXT_XML));ObjectMapper objectMapper = converter.getObjectMapper();objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));converters.add(converter);}
    }

测试controller

  • controller

    @RestController
    public class HomeController {@RequestMapping("/")public String home() {return "home";}@RequestMapping("/cn")public String cn() {return "中文测试";}@RequestMapping("/object")public Book object() {return new Book(10, "springmvc-javaconfig踩坑记录", new Date());}private class Book {private Integer id;private String name;private Date pubDate;public Book(Integer id, String name, Date pubDate) {this.id = id;this.name = name;this.pubDate = pubDate;}public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Date getPubDate() {return pubDate;}public void setPubDate(Date pubDate) {this.pubDate = pubDate;}}
    }
  • controller测试

    import org.junit.Before;
    import org.junit.Test;
    import org.mockito.InjectMocks;
    import org.mockito.MockitoAnnotations;
    import org.springframework.http.MediaType;
    import org.springframework.test.web.servlet.MockMvc;import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
    import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.*;
    import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
    import static org.springframework.test.web.servlet.setup.MockMvcBuilders.*;/*** Created by sealde on 5/27/17.*/
    public class HomeControllerTest {private MockMvc mockMvc;@InjectMocksprivate HomeController controller;@Beforepublic void setUp() {MockitoAnnotations.initMocks(this);this.mockMvc = standaloneSetup(controller).build();}@Testpublic void testHome() throws Exception {mockMvc.perform(get("/")).andDo(print()).andExpect(status().isOk()).andExpect(content().string("home"));}@Testpublic void testCn() throws Exception {mockMvc.perform(get("/cn").accept(MediaType.APPLICATION_JSON_UTF8)).andDo(print()).andExpect(status().isOk()).andExpect(content().string("中文测试"));}@Testpublic void testObject() throws Exception {mockMvc.perform(get("/object").accept(MediaType.APPLICATION_JSON_UTF8)).andDo(print()).andExpect(status().isOk());}
    }

尚未解决

  • 单元测试不知道怎么使用 WebConfig 的配置

最后

  • 代码(springmvc dev1分支): http://git.oschina.net/sealde...

  • 代码(springboot dev1分支): https://git.oschina.net/seald...

新人上路-搭建项目-springweb-controller测试相关推荐

  1. 支付宝支付 第三集:搭建项目及测试(含代码)

    支付宝支付 第三集:搭建项目及测试(含代码) 一.资源 在搭建项目的时候,涉及到了SpringBoot的配置文件properties与yml文件,由于之前的项目使用的全部是properties类型,这 ...

  2. 你还在费力的从零搭建项目吗?

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 作者 | 无知者云 链接 | https://www.cnblog ...

  3. 你还在从零搭建项目 ?

    点击上方"方志朋",选择"设为星标" 做积极的人,而不是积极废人 作者 | 无知者云 链接 | https://www.cnblogs.com/davenkin ...

  4. vue搭建项目、创建登录页面和后台交互之引入axios

    目录 1. 搭建项目 1.1 使用vue-cli创建项目 1.2 通过npm安装element-ui 1.3 导入组件 2 创建登录页面 2.1 创建登录组件 2.2 引入css(css.txt) 2 ...

  5. SpringBoot(一)_快速实战搭建项目

    现在在学习springboot 相关的知识,感觉真的很好用,用idea 进行开发,根据慕课网和纯洁的微笑的课程.进行总结下. 使用idea创建springboot项目 (1)单击 File | New ...

  6. SpringCloud系列二:Restful 基础架构(搭建项目环境、创建 Dept 微服务、客户端调用微服务)...

    声明:本文来源于MLDN培训视频的课堂笔记,写在这里只是为了方便查阅. 1.概念:Restful 基础架构 2.具体内容 对于 Rest 基础架构实现处理是 SpringCloud 核心所在,其基本操 ...

  7. SpringCloud 搭建项目环境、创建 Dept 微服务、客户端调用微服务

    对于 Rest 基础架构实现处理是 SpringCloud 核心所在,其基本操作形式在 SpringBoot 之中已经有了明确 的讲解,那么本次为 了清晰可见,创建一套新的微服务架构:部门微服务(De ...

  8. typeorm mysql_从零搭建项目 (10) --- 后端: 使用 TypeORM 和 MySQL

    从零搭建项目 (10) --- 后端: 使用 TypeORM 和 MySQL 我的博客地址 正式地址 测试地址 前端源码 后端源码 文章目录 项目及其技术栈介绍 前端: 项目初始化 前端: 使用 Sa ...

  9. (硅谷课堂项目)Java开发笔记2:项目概述,搭建项目环境和开发讲师管理接口

    文章目录 (硅谷课堂项目)Java开发笔记2:项目概述,搭建项目环境和开发讲师管理接口 1.项目概述 1.1 项目介绍 1.2 硅谷课程流程图 1.3 硅谷课堂功能架构 1.4 硅谷课堂技术架构 1. ...

最新文章

  1. github oracle教程,GitHub 使用教程图文详解
  2. 中国SaaS死或生之六:逢场作戏or脚踏实地?
  3. 51nod 1258 序列求和 V4
  4. C++中的STL--结构概览
  5. mysql-5.1.50中文_mysql5.1 中文 乱码 mysql 5.1 中文字符集问题终极解决方案
  6. 哈啰出行架构调整:两轮电动车租售平台将升级为独立事业部
  7. 主页所停留的时间实现交互
  8. android之提示Cleartext HTTP traffic to not permitted
  9. python隐藏部分代码_python源码隐藏
  10. 键盘定位板图纸_看看199的机械键盘可以有多酷
  11. 2.已知维数求超立方体邻接矩阵
  12. 开放式激光振镜+运动控制器(三):振镜矫正
  13. RISC-V MCU应用教程之PWR睡眠模式
  14. [编辑器]KindEditor 是什么?
  15. 向 Oracle 数据库添加 ST_Geometry 类型
  16. 2022年全国职业院校技能大赛网络安全竞赛试题 A-2样题
  17. Spring基本运行
  18. Java字符串转换成字符数组
  19. tlbb lua - tlbb cegui 天龙八部UI界面移植+脚本原理视频教程
  20. Render Hell —— 史上最通俗易懂的GPU入门教程(四)

热门文章

  1. 改变电子商务行业的5种人工智能趋势
  2. GPT-3 1750亿参数少样本无需微调,网友:「调参侠」都没的当了
  3. 大咖来信|浪潮刘军:AI计算将成为“新基建”核心支撑之一
  4. SAP SD基础知识之与FI集成相关的流程与配置
  5. ​一文看懂数据清洗:缺失值、异常值和重复值的处理
  6. 2019年上半年收集到的人工智能机器学习方向干货文章
  7. 2019年值得关注的人工智能技术的五大趋势
  8. 难解?SAP云平台集成前路何方?
  9. 中国CIO最关心的八大问题(上)
  10. Tensorflow— 递归神经网络RNN