spring 4.0 JUnit简单的Controller测试

比Dao和Service的测试稍微复杂一点。还是先写一个BasicWebTest用来总体配置:

@WebAppConfiguration
@ContextConfiguration(locations= {"classpath:spring/applicationContext.xml","classpath:spring/spring-servlet.xml"})
public class BasicWebTest extends AbstractTransactionalJUnit4SpringContextTests {

    @Autowired
    protected WebApplicationContext wac;

    protected MockMvc mvc;

    @Before
    public void setUp() {
        this.mvc=MockMvcBuilders.webAppContextSetup(wac).build();
    }
}
BasicWebTest 上面多了个 @WebAppConfiguration 注解,并且类中也多了一些方法、字段。直接复制吧。测试用例如下:

package com.suyin.controller;

import java.util.List;

import org.hamcrest.Description;
import org.hamcrest.Matcher;
import org.junit.Test;
import org.springframework.mock.web.MockHttpServletRequest;
import org.springframework.mock.web.MockHttpServletResponse;
import org.springframework.test.web.servlet.MvcResult;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.result.MockMvcResultMatchers;

import com.jayway.jsonpath.JsonPath;
import com.suyin.BasicWebTest;
import com.suyin.pojo.People;
@SuppressWarnings("unchecked")
public class PeopleControllerTest extends BasicWebTest {

    @Test
    public void queryAll() throws Exception {
        mvc.perform(MockMvcRequestBuilders.get("/people/queryAll"))
                .andExpect(MockMvcResultMatchers.status().isOk())
                .andExpect(MockMvcResultMatchers.view().name("people/list"))
                .andExpect(MockMvcResultMatchers.request().attribute("list", new MatcherAdapter() {

                    @Override
                    public void describeMismatch(Object item, Description mismatchDescription) {
                        mismatchDescription.appendText("wrong list size");
                    }

                    @Override
                    public boolean matches(Object item) {
                        List<People> list=(List<People>) item;
                        return list.size()==4;
                    }

                }));
    }
    @Test
    public void asynQueryAll() throws Exception {
        MvcResult mr=mvc.perform(MockMvcRequestBuilders.get("/people/asynQueryAll").content("{\"id\":1}"))
                .andExpect(MockMvcResultMatchers.status().isOk())
                .andExpect(MockMvcResultMatchers.jsonPath("$.id").exists())
                .andReturn();

        MockHttpServletResponse response=mr.getResponse();
        MockHttpServletRequest request=mr.getRequest();
    }

    @Test
    public void update1() throws Exception {
        mvc.perform(MockMvcRequestBuilders.post("/people/update").param("id", "29")
                .param("name", "Jack")
                .param("address", "japan")
                .param("age", "19"))
                .andExpect(MockMvcResultMatchers.status().isOk())
                .andExpect(MockMvcResultMatchers.view().name("people/detail"));

    }
    @Test
    public void update2() throws Exception {

        mvc.perform(MockMvcRequestBuilders.post("/people/update")
                //.param("name", "Jack")
                .param("address", "japan")
                .param("age", "19"))
                .andExpect(MockMvcResultMatchers.status().isOk())
                .andExpect(MockMvcResultMatchers.view().name("error"));
    }

    @Test
    public void add1()throws Exception  {
        mvc.perform(MockMvcRequestBuilders.post("/people/add")
                .param("name", "JJJJ")
                .param("address", "")
                .param("age", "1")
                )
                .andExpect(MockMvcResultMatchers.status().isOk())
                .andExpect(MockMvcResultMatchers.view().name("people/detail"));
    }
    @Test
    public void add2()throws Exception  {
        mvc.perform(MockMvcRequestBuilders.post("/people/add")
                .param("address", "")
                .param("age", "1")
                )
                .andExpect(MockMvcResultMatchers.status().isOk())
                .andExpect(MockMvcResultMatchers.view().name("error"));
    }

    abstract class MatcherAdapter<T> implements Matcher<T>{

        @Override
        public void describeTo(Description arg0) {
            // TODO Auto-generated method stub

        }

        @Override
        public void _dont_implement_Matcher___instead_extend_BaseMatcher_() {
            // TODO Auto-generated method stub

        }

        @Override
        public abstract void describeMismatch(Object item,
                Description mismatchDescription);

        @Override
        public abstract boolean matches(Object item) ;

    }
}

认真说来关于Controller的Spring测试就这样了。在多就是关于MockMvc的API学习了。

时间: 2024-10-11 12:44:33

spring 4.0 JUnit简单的Controller测试的相关文章

spring 4.0 JUnit简单的Dao,Service测试

1.AbstractTransactionalJUnit4SpringContextTests 和AbstractJUnit4SpringContextTests.我们在测试用例类要继承两种中的一个. AbstractTransactionalJUnit4SpringContextTests提供了数据库自动回滚,也就是说测试前和测试后数据库是一样的 AbstractJUnit4SpringContextTests不提供数据库自动回滚,测试会破坏数据库. 查看源码发现,AbstractTransa

开发 ASP.NET vNext 续篇:云优化的概念、Entity Framework 7.0、简单吞吐量压力测试

position:static(静态定位) 当position属性定义为static时,可以将元素定义为静态位置,所谓静态位置就是各个元素在HTML文档流中应有的位置 podisition定位问题.所以当没有定义position属性时,并不说明该元素没有自己的位置,它会遵循默认显示为静态位置,在静态定位状态下无法通过坐标值(top,left,right,bottom)来改变它的位置. position:absolute(绝对定位) 当position属性定义为absolute时,元素会脱离文档流

spring boot web开发 简单的增删改查和spring boot 自带的Junit测试 案例

创建 web项目 配置pom.xml文件   ------相当于jar包 配置application.yml -----配置文件(spring数据库连接.server服务.logging日志等) 创建 package  (entity.controller.service.configuration.repository.interceptor等) 小例子: entity:Person 数据持久化(dao): controller: spring 自带Junit测试@SpringBootTest

spring && Cobertura && maven &&junit 单元测试以及测试覆盖率

1. 目的: junit 单元测试,Cobertura   测试覆盖率报告 项目目录结构 2. maven 配置 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://mave

“Junit” 简单测试

junit 测试是一种简单的小测试,以下向大家展示一下如何利用eclipse自带的junit做一个简单的小测试. 新建一个Java project “helloHcs”,简单的输出“Hello HCS” 如图 之后新建一个junit project“junit”,简单的测试一下“helloHcs”Java project 如图: 运行两个project:结果如下: 这是一个非常简单的junit测试.

Spring框架下Junit测试

Spring框架下Junit测试 一.设置 1.1 目录 设置源码目录和测试目录,这样在设置产生测试方法时,会统一放到一个目录,如果没有设置测试目录,则不会产生测试代码. 1.2 增加配置文件 Resources目录下创建配置文件. 1.3 引入包和配置文件 import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframewo

Spring 3.0 学习-DI 依赖注入_创建Spring 配置-使用一个或多个XML 文件作为配置文件,使用自动注入(byName),在代码中使用注解代替自动注入,使用自动扫描代替xml中bea

文章大纲 在xml中声明bean和注入bean 在xml中声明bean和自动注入bean 自动扫描bean和自动注入bean 对自动扫描bean增加约束条件 首次接触spring请参考 Spring 3.0 学习-环境搭建和三种形式访问 1.典型的Spring XML 配置文件表头 <?xml version="1.0" encoding="UTF-8"?><!-- 一般化的Spring XML 配置 --> <beans xmlns=

Spring MVC +MyBatis +MySQL 简单的登录查询 Demo 解决了mybatis异常

忙活了大半天,饭也没顾得上吃,哎许久不动手,一动手就出事,下面请看今天的重头戏,额吃个饭回来再发了! 1.整体结构 2.准备工作 数据库: --Mysql 5.6 创建数据库 wolf CREATE DATABASE wolf; 创建用户表 user create table user( id int  AUTO_INCREMENT  primary key, name varchar(25) not null, pwd varchar(20) not null, create_time dat

JAVAWEB开发之Spring详解之——Spring的入门以及IOC容器装配Bean(xml和注解的方式)、Spring整合web开发、整合Junit4测试

Spring框架学习路线 Spring的IOC Spring的AOP,AspectJ Spring的事务管理,三大框架的整合 Spring框架概述 什么是Spring? Spring是分层的JavaSE/EE full-stack(一站式)轻量级开源框架. 所谓分层: SUN提供的EE的三层结构:web层.业务层.数据访问层(也称持久层,集成层). Struts2是web层基于MVC设计模式框架. Hibernate是持久的一个ORM的框架. 所谓一站式:Spring框架有对三层的每层解决方案.