spring 4.0 JUnit简单的Controller测试

本文介绍如何使用Spring MVC进行控制器测试,包括同步与异步请求、参数传递及响应验证等操作。通过具体示例展示了如何利用MockMvc进行各种场景的测试。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

比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) ;
        
    }
}
View Code

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

 

转载于:https://www.cnblogs.com/formyjava/p/4595337.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值