关于单元测试的controller的调用

qq_37902466 2017-10-20 03:13:03
我的分页的controller
package controller;


import bean.Client;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import service.ClientService;


import java.util.List;

@Controller
public class ClientController {
@Autowired
ClientService clientService;
@RequestMapping("/clis")
public String getClis(@RequestParam(value="pn",defaultValue = "1")Integer pn, Model model){
PageHelper.startPage(pn,5);

List<Client> clis=clientService.getAll();
PageInfo page=new PageInfo(clis,5);
model.addAttribute("pageInfo",page);
return "list";
}
}

单元测试

package test;

import java.util.List;

import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mock.web.MockHttpServletRequest;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.web.WebAppConfiguration;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.MvcResult;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import org.springframework.web.context.WebApplicationContext;

import bean.Client;
import com.github.pagehelper.PageInfo;

@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@ContextConfiguration(locations ={"classpath:applicationContext.xml","file:E:\\test\\MacenDemo\\src\\main\\webapp\\WEB-INF\\dispatcherServlet-servlet.xml"})
public class MvcTest {
@Autowired
WebApplicationContext context;
MockMvc mockMvc;
@Before
public void initMockMvc(){

mockMvc=MockMvcBuilders.webAppContextSetup(context).build();
}
@Test
public void testPage() throws Exception{
MvcResult result= mockMvc.perform(MockMvcRequestBuilders.get("/clis").param("pn","5")).andReturn();
MockHttpServletRequest request=result.getRequest();
PageInfo pi= (PageInfo) request.getAttribute("pageInfo");
System.out.println("当前页码:"+ pi.getPageNum());
System.out.println("总页码:"+ pi.getPages());
System.out.println("总记录数:"+ pi.getTotal());
System.out.println("在页面需要连续显示的页码");
int[] nums=pi.getNavigatepageNums();
for(int i:nums){
System.out.println(" "+i);
}
List<Client> list=pi.getList();
for(Client client:list){
System.out.println("ID:"+client.getId()+"==>Name"+client.getClientname());
}
}
}

异常代码

java.lang.NullPointerException
at test.MvcTest.testPage(MvcTest.java:39)
也就是没有取到pi的值,pi为空
ClientController 显示Class 'ClientController' is never used

求大神指导,已经研究两天了,谢谢你们了
...全文
737 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
自由自在_Yu 2017-11-16
  • 打赏
  • 举报
回复
PageInfo pi= (PageInfo) request.getAttribute("pageInfo"); pageInfo变量值没有传过来,所以为null
qq_33122995 2017-11-15
  • 打赏
  • 举报
回复
解决了么?同问
通过该课程的学习,掌握0行代码写服务框架的服务发布,参数验证,代码生成功能,具备初步的使用能力 该项目本身设计的内容非常多,后期会逐步开放讲解框架后期内容参考:https://mp.csdn.net/editor/html/112142371与Springboot+mybatis和Springboot+jdbctemplate对比:https://editor.csdn.net/md/?articleId=106091083框架主要功能:生成自定义sql模板文件1.一键生成数据库所有列表增、删、改、查接口通过代码生成器,一键生成增、删、改、查代码,分为有代码和无代码两种方式。有代码方式可以在需要业务封装时直接调用生成的代码进行业务组装。有代码方式和无代码方式都可以直接调用访问。2.可指定单表生成接口可以指定生成那张表的数据接口,以免对已有接口造成影响。3.一键生成接口测试postman调用文件生成postman调用接口,直接导入即可测试,不需要单独也写接口文档,也不需要使用swangger在代码中单独增加注释。字段长度类型,大小一目了然。4.可生成controller、service、dao、model、自定义sql、postman测试文件可以根据实际需要进行单独配置5.接口任意参数可自动配置多维度验证比如一个参数phone,在不需要编程的情况下,可以配置验证是否为空、长度、是否是电话号码6.数据接口可以任意组合形成新的接口比如、查询学校是一个接口、查询城市是一个接口,通常情况下在前端是需要两次请求,现在可以通过一次请求自动合并两个接口的数据结果,一次性返回。而这样的组合可以是无限个组合。7.所有接口参数均可自动封装比如查询省份接口,里面有10个参数,前端传入几个参数,便可自动封装几个参数。8.所有查询接口自带分页列表查询,有码方式和无码方式,均自带分页。9.通过简单sql的编辑即可完成服务发布只要会写sql便可生成服务,不需要任何多余操作10.接口可以进行限流配置,可以根据ip、token、ak进行限流操作多维度自定义限流,可设置次数、时限、限流方式11.所有接口可以进行签名认证所有接口通过接口sign签名认证12.所有接口可以进行登录认证限制,也可单独配置不需要登录认证可以指定接口单独授权不需要登录验证,比如验证码接口13.所有接口均可设置需要验证码验证所有的接口都可以通过参数配置设置短信验证码和图片验证码14.所有查询接口均可单独设置缓存所有接口皆可设置单独缓存,缓存周期15.所有接口均可监控访问次数同一接口访问次数记录,很容易监控服务访问,可以做更细致的服务优化16.所有接口均可记录访问日志,包括请求来源请求参数、获得结果入参出参所有访问皆有详细记录17.项目中的代码可以进行自动统计代码量一键统计代码量,包括前后端代码行数和体积18.可以自动进行数据统计,可配置单表数据量统计、也可以配置定时任务数据统计自动表数据统计,方便做BI可视化报表,不需要开发直接配置即可19.可进行跨域设置跨域通过配置文件配置20.可进行IP禁用对于恶意访问ip进行封禁21.可进行访问次数限制所有接口可以进行访问次数限制22.可进行访问来源设备、应用检查验证验证请求来源所用设备和请求发起的应用

81,094

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧