`
sillycat
  • 浏览: 2487508 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

Spring3 and REST Integeration(VII)Controller JUnit Test and Mock/Spring Test MVC

 
阅读更多
Spring3 and REST Integeration(VII)Controller JUnit Test and Mock/Spring Test MVC
Spring Test MVC
I found a spring mvc test framework in github.com, that is nice to have this open source project.

The pom.xml will be changed as follow to get dependencies:
<repositories]]>
<!-- http://maven.springframework.org/snapshot -->
<repository]]>
            <id]]>springframe_snapshot_repo</id]]>
            <name]]>springframe snapshot repo</name]]>
            <url]]>http://maven.springframework.org/snapshot</url]]>
        </repository]]>
<!-- http://repository.sonatype.org/content/groups/public/ -->
<repository]]>
            <id]]>sonatype_repo</id]]>
            <name]]>sonatyperepo</name]]>
            <url]]>http://repository.sonatype.org/content/groups/public/</url]]>
        </repository]]>
<!--  http://developer.k-int.com/maven2/ -->
<repository]]>
            <id]]>k_int_repo</id]]>
            <name]]>k intrepo</name]]>
            <url]]>http://developer.k-int.com/maven2/</url]]>
        </repository]]>
<repository]]>
            <id]]>maven_repo1</id]]>
            <name]]>maven repo1 Repository</name]]>
            <url]]>http://search.maven.org</url]]>
        </repository]]>
        <repository]]>
        <id]]>maven_jboss</id]]>
        <name]]>mavenjboss repository</name]]>
        <url]]>http://repository.jboss.com</url]]>
        </repository]]>
        <repository]]>
        <id]]>maven_java</id]]>
        <name]]>maven java repository</name]]>
        <url]]>http://download.java.net/maven/2/</url]]>
        </repository]]>
    <repository]]>
            <id]]>sillycat</id]]>
            <name]]>sillycat Repository</name]]>
            <url]]>https://sillycat.googlecode.com/svn/repository</url]]>
        </repository]]>
        <repository]]>
            <id]]>alfresco-maven-release</id]]>
            <name]]>Alfresco Maven Release Repository</name]]>
            <url]]>http://maven.alfresco.com/nexus/content/repositories/releases/</url]]>
        </repository]]>
</repositories]]>

<pluginRepositories]]>
<pluginRepository]]>
            <id]]>springframe_snapshot_repo</id]]>
            <name]]>springframe snapshot repo</name]]>
            <url]]>http://maven.springframework.org/snapshot</url]]>
        </pluginRepository]]>
<pluginRepository]]>
<id]]>sonatype_repo</id]]>
            <name]]>sonatyperepo</name]]>
            <url]]>http://repository.sonatype.org/content/groups/public/</url]]>
        </pluginRepository]]>
<pluginRepository]]>
            <id]]>k_int_repo</id]]>
            <name]]>k intrepo</name]]>
            <url]]>http://developer.k-int.com/maven2/</url]]>
        </pluginRepository]]>
<pluginRepository]]>
            <id]]>maven_repo1</id]]>
            <name]]>maven repo1 Repository</name]]>
            <url]]>http://search.maven.org</url]]>
        </pluginRepository]]>
        <pluginRepository]]>
        <id]]>maven_jboss</id]]>
        <name]]>mavenjboss repository</name]]>
        <url]]>http://repository.jboss.com</url]]>
        </pluginRepository]]>
        <pluginRepository]]>
        <id]]>maven_java</id]]>
        <name]]>maven java repository</name]]>
        <url]]>http://download.java.net/maven/2/</url]]>
        </pluginRepository]]>
    <pluginRepository]]>
            <id]]>sillycat</id]]>
            <name]]>sillycat Repository</name]]>
            <url]]>https://sillycat.googlecode.com/svn/repository</url]]>
        </pluginRepository]]>
        <pluginRepository]]>
            <id]]>alfresco-maven-release</id]]>
            <name]]>Alfresco Maven Release Repository</name]]>
            <url]]>http://maven.alfresco.com/nexus/content/repositories/releases/</url]]>
        </pluginRepository]]>
</pluginRepositories]]>


<dependency]]>
<groupId]]>org.springframework</groupId]]>
<artifactId]]>spring-context</artifactId]]>
<version]]>3.1.1.RELEASE</version]]>
</dependency]]>
<dependency]]>
<groupId]]>org.springframework</groupId]]>
<artifactId]]>spring-web</artifactId]]>
<version]]>3.1.1.RELEASE</version]]>
</dependency]]>
<dependency]]>
<groupId]]>org.springframework</groupId]]>
<artifactId]]>spring-webmvc</artifactId]]>
<version]]>3.1.1.RELEASE</version]]>
</dependency]]>
<dependency]]>
<groupId]]>javax.servlet</groupId]]>
<artifactId]]>servlet-api</artifactId]]>
<version]]>3.0-alpha-1</version]]>
<scope]]>provided</scope]]>
</dependency]]>
<dependency]]>
<groupId]]>org.codehaus.jackson</groupId]]>
<artifactId]]>jackson-core-asl</artifactId]]>
<version]]>1.9.6</version]]>
</dependency]]>
<dependency]]>
<groupId]]>org.codehaus.jackson</groupId]]>
<artifactId]]>jackson-mapper-asl</artifactId]]>
<version]]>1.9.6</version]]>
</dependency]]>
<dependency]]>
<groupId]]>log4j</groupId]]>
<artifactId]]>log4j</artifactId]]>
<version]]>1.2.15</version]]>
</dependency]]>
<dependency]]>
<groupId]]>junit</groupId]]>
<artifactId]]>junit</artifactId]]>
<version]]>4.10</version]]>
<scope]]>test</scope]]>
</dependency]]>
<dependency]]>
<groupId]]>org.springframework</groupId]]>
<artifactId]]>spring-test</artifactId]]>
<version]]>3.1.1.RELEASE</version]]>
<scope]]>test</scope]]>
</dependency]]>
<dependency]]>
<groupId]]>org.springframework</groupId]]>
<artifactId]]>spring-mock</artifactId]]>
<version]]>2.0.8</version]]>
</dependency]]>
<dependency]]>
<groupId]]>org.mockito</groupId]]>
<artifactId]]>mockito-core</artifactId]]>
<version]]>1.9.0</version]]>
</dependency]]>
<dependency]]>
<groupId]]>org.springframework</groupId]]>
<artifactId]]>spring-test-mvc</artifactId]]>
<version]]>1.0.0.BUILD-SNAPSHOT</version]]>
</dependency]]>
<dependency]]>
<groupId]]>com.jayway.jsonpath</groupId]]>
<artifactId]]>json-path</artifactId]]>
<version]]>0.5.6</version]]>
</dependency]]>
<dependency]]>
<groupId]]>org.hamcrest</groupId]]>
<artifactId]]>hamcrest-core</artifactId]]>
<version]]>1.3.RC2</version]]>
</dependency]]>
<dependency]]>
<groupId]]>org.hamcrest</groupId]]>
<artifactId]]>hamcrest-library</artifactId]]>
<version]]>1.3.RC2</version]]>
</dependency]]>

And the test implementation will be as follow:
package com.sillycat.easyrestserver.controller;

import static org.springframework.test.web.server.result.MockMvcResultMatchers.content;
import static org.springframework.test.web.server.result.MockMvcResultMatchers.jsonPath;
import static org.springframework.test.web.server.result.MockMvcResultMatchers.status;

import java.io.IOException;

import javax.servlet.ServletException;

import org.codehaus.jackson.map.ObjectMapper;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
import org.springframework.http.MediaType;
import org.springframework.test.web.server.request.MockMvcRequestBuilders;
import org.springframework.test.web.server.setup.MockMvcBuilders;

import com.sillycat.easyrestserver.model.Company;
import com.sillycat.easyrestserver.model.Person;
import com.sillycat.easyrestserver.service.PersonService;

public class PersonControllerTest {

     @Mock
     private PersonService mockPersonService;

     PersonController personController;

     Person person;

     ObjectMapper jsonMapper;

     @Before
     public void setUp() throws ServletException, IOException {
          MockitoAnnotations.initMocks(this);

          personController = new PersonController();
          personController.setPersonService(mockPersonService);

          person = new Person();
          person.setCompany(new Company());
          person.setId(3);
          person.setPersonName("person3");

          jsonMapper = new ObjectMapper();
     }

     @Test
     public void get() throws Exception {

          Mockito.when(mockPersonService.get(3)).thenReturn(person);

          MockMvcBuilders
                    .standaloneSetup(personController)
                    .build()
                    .perform(
                              MockMvcRequestBuilders.get("/person/3").accept(
                                        MediaType.APPLICATION_JSON))
                    .andExpect(status().isOk())
                    .andExpect(content().type(MediaType.APPLICATION_JSON))
                    .andExpect(jsonPath("$.personName").value("person3"));
     }

     @Test
     public void add() throws Exception {
          person.setId(null);
          String jsonPerson = jsonMapper.writeValueAsString(person);
          MockMvcBuilders
                    .standaloneSetup(personController)
                    .build()
                    .perform(
                              MockMvcRequestBuilders.post("/person")
                                        .contentType(MediaType.APPLICATION_JSON)
                                        .accept(MediaType.APPLICATION_JSON)
                                        .body(jsonPerson.getBytes()))
                    .andExpect(status().isOk())
                    .andExpect(content().type(MediaType.APPLICATION_JSON))
                    .andExpect(jsonPath("$.personName").value("person3"));
     }
}


references:

分享到:
评论

相关推荐

    Pro Spring for Integeration

    spring 用于 信息系统的集成 的最新英文书籍 著名的Apress 出版社 出版

    spring shiro cas

    spring shiro cas ! maven integeration

    WEB项目集成Flex3功能

    所谓万事开头难,共同期待好的向导,故在《FRAME-INTEGERATION》专栏,逐步整理并给出日常开发框架整合此类向导,而此类整合主要关注于Struts2、Spring2、iBatis2及Flex3的种种组合方式整合,而本篇整合仅仅是入门级...

    工作流人工任务 Websphere Integeration Development 开发

    工作流人工任务 Websphere Integeration Development 开发的实例, 部署到W P S上。 演示了2个人工任务的流程处理。

    docker-jenkins-integeration

    docker-jenkins-integeration

    Process Integration7.0标准的安装文档

    标准安装手册,很值得一看,一定要按照标准的东西来

    MuleStudio用户手册.doc

    Mule是一个以Java为核心的轻量级的消息框架和整合平台,基于EIP(Enterprise Integeration Patterns,由Hohpe和Woolf编写的一本书)而实现的。Mule的核心组件是UMO(Universal Message Objects,从Mule2.0开始UMO这一...

    ETL之PDI/Kettle9.x/8.x案例培训实战从入门到应用案例

    利用碎片化的时间学习即可,每天学习一小时或3个课时即可达到效果;时间充足者,自由安排 课程目标: 促使教育公平,打破教育壁垒,让ETL更加的大众化使用 课程简介: 【可视化介绍】 Kettle 是 PDI 以前的名称...

    ETL工具kettle学习总结.doc

    Kettle也叫PDI(全称是Pentaho Data Integeration),是一款开源的ETL工具,项目开始于2003年,2006年加入了开源的 BI 组织 Pentaho, 正式命名为PDI。

    kettle-spoon介绍

    Kettle是一款国外开源的ETL工具,纯java编写,可以在Window、Linux、Unix上运行,数据抽 ...Kettle 是 PDI 以前的名称,PDI 的全称是Pentaho Data Integeration,Kettle 本意是水壶的意思,表达了数据流的含义。

    bootstrap-easy-sidebar, 围绕主题集成和灵活性设计的Bootstrap 工具条.zip

    bootstrap-easy-sidebar, 围绕主题集成和灵活性设计的Bootstrap 工具条 bootstrap-easy-sidebar我看到了 Bootstrap的几个边栏,找到了大多数缺乏主题integeration和灵活性的领域。 通过继承导航栏的所有样式,然后在...

    i4C_Industry_4_0_Cell

    工业 4.0 单元 (i4C) - 根据工业 4.0 概念的机器人单元该项目的第一阶段涉及工业 4.0 背景下的机器人单元设计,并在布尔诺理工大学机械工程学院自动化与计算机科学研究所实施。 这一阶段项目的主要部分是单元的建设...

Global site tag (gtag.js) - Google Analytics