JavaWebFrame 中控制器的一些问题和测试用例
来源:互联网 发布:私人摄像头直播软件 编辑:程序博客网 时间:2024/05/21 10:59
2014 5 28
接下来我们看JUnit部分,我们找到
今晚的主要任务是对项目中已经做出来的注册和登陆界面添加后台。
这是登陆
还有注册
我们看LoginUser的Controller
@RequestMapping("/user" )
@Controller
public class LoginUserController extends BaseController {
@Resource
private LoginUserService userService ;
@RequestMapping(value = "regist" , method = RequestMethod.GET)
public ModelAndView regist(ModelAndView modelAndView) {
return JspLocation(modelAndView, "regist" );
这里的是首先mapping映射一下,然后声明是控制器。注入Service,声明get方法。
@RequestMapping(value = "regist" , method = RequestMethod.POST)
public ModelAndView regist(ModelAndView modelAndView,
@Valid @ModelAttribute LoginUser user, BindingResult bindResult) {
if (bindResult.hasErrors()) {
modelAndView.setViewName( "/user/regist");
return modelAndView;
}
userService.save(user);
modelAndView.setViewName( "redirect:/userCenter/index");
return modelAndView;
}
这边插入一下Spring的知识
SpringMVC 文档提到了 @SessionAttributes annotation,和 @ModelAttribute 配合使用可以往 Session 中存或者从 Session 中取指定属性名的具体对象。 ,@SessionAttributes 是用来在 controller 内部共享 model 属性的。从文档自带的例子来看,标注成 @SessionAttributes 属性的对象,会一直保留在 Session 或者其他会话存储中,直到 SessionStatus 被显式 setComplete()。
controller的代码如下:@Controller@SessionAttributes("currentUser")public class GreetingController{@RequestMappingpublic void hello(@ModelAttribute("currentUser") User user){ //user.sayHello()}}使用这种方案,还需要在 SpringMVC 配置文件的 ViewResolver 定义处,加上 p:allowSessionOverride="true",这样如果你对 User 对象做了修改,SpringMVC 就会在渲染 View 的同时覆写 Session 中的相关属性。
http://blog.csdn.net/li_xiao_ming/article/details/8349115 一篇文档讲解。
http://exceptioneye.iteye.com/blog/1305040
@RequestMapping(value = "confirmRegist" )
public @ResponseBody RegistJson confirmRegist(String email,String username){
if(userService .getUserByName(username) != null){
return new RegistJson("用户名已经存在");
}
if(userService .getUserByEmail(email) != null){
return new RegistJson("邮箱已经注册");
}
return new RegistJson();
}
这里返回一个Json如果数据库中已经存在。
@RequestMapping(value = "login" , method = RequestMethod.GET)
public String login() {
return JspLocation("login" ); //初始化的时候,通过get访问
}
@RequestMapping(value = "login" , method = RequestMethod.POST)
public String login(@Valid LoginUser user, BindingResult bindResult) {
UsernamePasswordToken token = new UsernamePasswordToken(user.username ,
user. password);
Subject subject = SecurityUtils. getSubject();
subject.login(token);
return redirect(UserCenterController.controllerMap, "/index.do");
}
这里是登陆的控制器,@valid判断是否合法。Subject 是shiro的内容。 然后成功返回、
@Override
protected String getJspLocation() {
return "/user/" ;
}
接下来我们看JUnit部分,我们找到
这里我们用到http://javasee.iteye.com/blog/1000868很多mock的知识。
@Mock
LoginUserService loginUserService;
@InjectMocks
LoginUserController loginUserController;
声明mock 然后注入
@Test
public void registPostTest() throws Exception {
String action = actionPrefix + "regist.do" ;
MvcResult result = mockMvc
.perform(
get(action).param("userName", "userName")
.param( "passWord", "passWord")
.param( "email", "email" ))
.andDo(MockMvcResultHandlers. print())
.andExpect( view().name("/user/regist")).andReturn();
}
@Test
public void confirmRegistByEmailTest() throws Exception{
String action = actionPrefix + "confirmRegist.do" ;
String email = "demo@demo.com";
when(loginUserService.getUserByEmail(email)).
thenReturn( new LoginUser());
when(loginUserService.getUserByName( "username")).
thenReturn( null);
MvcResult result = mockMvc
.perform(
get(action).param("username", "userName")
.param( "email", email))
.andDo(MockMvcResultHandlers. print())
.andReturn();
}
//标记mockito的学习和when的用法
Springmvc 注解http://www.blogjava.net/pengo/archive/2010/11/28/339229.html
http://haohaoxuexi.iteye.com/blog/1343761
0 0
- JavaWebFrame 中控制器的一些问题和测试用例
- 【用例】测试用例编写的一些问题
- 对软件测试中“黑天鹅”问题的一些想法
- 测试过程中一些特殊问题的处理方式
- hbase测试过程中遇到的一些问题及解决方案
- 测试中,一些不常见的问题汇总
- CI框架中控制器和控制器内的方法命名
- 一些关于测试的问题
- 关于LCD控制器中一些寄存器的概念解释
- Spring中控制器方法返回字符串的一些细节
- 测试环境中安装sharepoint server 2010过程中出现的一些问题及解决过程
- 插件控制器的一些知识
- Spark中遇到的一些问题和相应的解决办法
- 总结项目中关于测试用例的问题
- 测试struts1遇到的一些问题
- 性能测试面试的一些问题
- WebUI自动化测试的一些问题
- 一些UiAutomator测试时出现的问题
- Linux运维第7天:Linux下sed工具及shell编程
- centos下 xxx is not in the soduers file 的解决方法!
- Linux运维第8天:Linux下vim使用及find工具
- 嵌入式Linux内核制作以及TFTP下载到开发板
- JAVA 自定义注解及参数获取
- JavaWebFrame 中控制器的一些问题和测试用例
- IOS_加速计_碰撞检测_小球位置修复_dispatch_once单例
- 顺序表有关操作(查找、插入、删除)
- maven(1)
- Linux运维第9天:Linux下suid,sgid,acl,shell编程
- DLL开发
- cocos2dx 2.2.3 xcode5.0,新建mac项目报错
- Linux 内核模块开发基本知识
- CentOS 6.4 电信ADSL拨号上网网络配置