资讯专栏INFORMATION COLUMN

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

shiina / 1413人阅读

摘要:新人上路搭建项目测试和配置测试最基本的依赖配置添加字符集过滤器解析返回数据静态资源不做处理解析返回数据测试中文测试踩坑记录测试中文测试尚未解决单元测试不知道怎么使用的配置最后代码分支代码分支

新人上路-搭建项目-springweb-controller测试 maven和gradle配置

测试controller最基本的依赖

maven

        
        
          org.springframework
          spring-webmvc
          ${spring.version}
        
        
          com.fasterxml.jackson.core
          jackson-databind
          ${jackson.version}
        
        

        
        
          javax.servlet
          javax.servlet-api
          3.1.0
          provided
        
        

        
        
          org.springframework
          spring-test
          ${spring.version}
          test
        
        
          org.mockito
          mockito-core
          ${mockito.version}
          test
        
        
          junit
          junit
          ${junit.version}
          test
        
        

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[]{"/"};
    }

    /** 添加字符集过滤器 **/
    @Override
    public 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返回数据 **/
    @Override
    public void configureMessageConverters(List> converters) {
    MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();

    List 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);
    }

    /** 静态资源不做处理 **/
    @Override
    public 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 {
    @Bean
    public ResourceBundleMessageSource messageSource() {
    ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
    messageSource.setBasename("messages");
    messageSource.setDefaultEncoding("UTF-8");

    return messageSource;
    }

    /**解析json返回数据**/
    @Override
    public void configureMessageConverters(List> converters) {
    MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();

    List 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;

    @InjectMocks
    private HomeController controller;

    @Before
    public void setUp() {
        MockitoAnnotations.initMocks(this);
        this.mockMvc = standaloneSetup(controller).build();
    }

    @Test
    public void testHome() throws Exception {
        mockMvc.perform(get("/"))
            .andDo(print())
            .andExpect(status().isOk())
            .andExpect(content().string("home"));
    }

    @Test
    public void testCn() throws Exception {
        mockMvc.perform(get("/cn")
            .accept(MediaType.APPLICATION_JSON_UTF8))
            .andDo(print())
            .andExpect(status().isOk())
            .andExpect(content().string("中文测试"));
    }

    @Test
    public 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...

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/67140.html

相关文章

  • 新手上路-搭建项目-springboot-swagger2

    摘要:新手上路搭建项目是一个接口文档软件界面如下添加这里使用版本可以正常使用配置文件测试新手上路。 新手上路-搭建项目-springboot-swagger2 swagger2 是一个接口文档软件 界面如下 showImg(https://segmentfault.com/img/bVOoim); gradle添加 compile(io.springfox:springfox-swagger...

    XGBCCC 评论0 收藏0
  • 一步步搭建JavaScript框架——初始化项目

    摘要:虽然还不够,但是开始了。一步步搭建框架项目名称一开始我做的次是是的一开始什么也没做,除了从和上注册了一个叫做的库然后在我们还没有开始写代码的时候版本就已经是这个速度好快。。生成项目框架为了简化这一个痛苦的过程,我们还是用。 从开始打算写一个MV*,到一个简单的demo,花了几天的时间,虽然很多代码都是复制/改造过来的,然而It Works(nginx的那句话会让人激动有木有)。现在他叫...

    omgdog 评论0 收藏0
  • H5新人福音~零配置搭建现代化的前端工程

    摘要:它可以让你在没有任何构建工具例如或等工具配置经验的情况下,帮你快速生成一个完整的前端工程,并可以打包代码和静态资源,使你的项目以最优异的性能上线。针对痛点零配置,快速搭建繁琐的开发环境搭建。自适应解决方案实现多终端显示一致。 X-BUILD一套基于Webpack(v4.21.0)快速搭建H5场景开发环境的脚手架,只需要几分钟的时间就可以运行起来。X-BUILD是针对H5开发的一套自动化...

    GraphQuery 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<