1,在eclipse中安装TestNg插件,这里省略。。
2,编写测试spring Dao层的代码
package test.com.smart.dao;
import com.smart.dao.UserDao;
import com.smart.domain.User;
import com.smart.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.testng.AbstractTestNGSpringContextTests;
import org.testng.annotations.Test;
import java.util.Date;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertNotNull;
import static org.testng.Assert.assertTrue;
@ContextConfiguration(locations = {"classpath:resources/applicationContext.xml"})
public class UserDaoTest extends AbstractTestNGSpringContextTests {
@Autowired
private UserDao userDao;
@Test
public void hasMatchUser() {
int count  = userDao.getMatchCount("admin1", "123456");
assertTrue(count>0);
}
@Test
public void findUserByUserName() {
User user = userDao.findUserByUserName("admin");
assertNotNull(user);
assertEquals(user.getUserName(), "admin");
}
}
  注意:@ContextConfiguration(locations = {"classpath:resources/applicationContext.xml"})这个注解是的localtion属性使用的是src类路径下面的

resources/applicationContext.xml spring配置文件
2,由于TestNg测试持久层和测试服务层十分类似,这里省略了,这里给出测试层的代码
  a,项目编写封装了客户端请求的类
package com.smart.web;
public class LoginCommand {
private String userName;
private String password;
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
}
 b.下面编写控制类的代码
package com.smart.web;
import java.util.Date;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import com.smart.domain.User;
import com.smart.service.UserService;
@Controller
@RequestMapping(value = "/admin")
public class LoginController {
@Autowired
private UserService userService;
@RequestMapping(value = "/login.html")
public String loginPage() {
return "login";
}
@RequestMapping(value = "/loginCheck.html")
public ModelAndView loginCheck(HttpServletRequest request, LoginCommand loginCommand) {
boolean isValidUser =
userService.hasMatchUser(loginCommand.getUserName(),
loginCommand.getPassword());
if (!isValidUser) {
return new ModelAndView("login", "error", "用户名或密码错误。");
} else {
User user = userService.findUserByUserName(loginCommand
.getUserName());
user.setLastIp(request.getLocalAddr());
user.setLastVisit(new Date());
userService.loginSuccess(user);
request.getSession().setAttribute("user", user);
return new ModelAndView("main");
}
}
}
c,编写好控制类的代码,我们就可以测试这个控制类了,下面的代码是使用TestNg测试controller十分正确
package test.com.smart.web;
import com.smart.domain.User;
import com.smart.web.LoginController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mock.web.MockHttpServletRequest;
import org.springframework.mock.web.MockHttpServletResponse;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.testng.AbstractTestNGSpringContextTests;
import org.springframework.test.util.ReflectionTestUtils;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.servlet.HandlerMapping;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertNotNull;
import static org.testng.Assert.assertNull;
@ContextConfiguration(locations = {"classpath:applicationContext.xml","file:d:/actionSpring/chapter/chapter1/src/main/webapp/WEB-INF/viewspace-servlet.xml"})
public class LoginControllerTest extends AbstractTestNGSpringContextTests {
@Autowired
private AnnotationMethodHandlerAdapter handlerAdapter;
@Autowired
private LoginController controller;
//声明Request与Response模拟对象
private MockHttpServletRequest request;
private MockHttpServletResponse response;
//执行测试前先初始模拟对象
@BeforeMethod
public void before() {
request = new MockHttpServletRequest();
request.setCharacterEncoding("UTF-8");
response = new MockHttpServletResponse();
request.setAttribute(HandlerMapping.INTROSPECT_TYPE_LEVEL_MAPPING, true); //Spring3.1 存在的BUG
}
// 测试LoginController#loginCheck()方法
@Test
public void loginCheck() throws Exception {
//测试登陆成功的情况
request.setRequestURI("/admin/loginCheck.html");
request.addParameter("userName", "admin"); // 设置请求URL及参数
request.addParameter("password", "123456");
//向控制发起请求 ” /loginCheck.html”
ModelAndView mav = handlerAdapter.handle(request, response, controller);
User user = (User) request.getSession().getAttribute("user");
assertNotNull(mav);
assertEquals(mav.getViewName(), "main");
assertNotNull(user);
request.getSession().removeAttribute("user");
//测试登陆失败的情况
request.setRequestURI("/admin/loginCheck.html");
request.addParameter("userName", "test");
request.addParameter("password", "123456");
mav = handlerAdapter.handle(request, response, controller);
user = (User) request.getSession().getAttribute("user");
assertNotNull(mav);
assertEquals(mav.getViewName(), "login");
assertNull(user);
}
}
 注意:
@ContextConfiguration(locations = {"classpath:applicationContext.xml","file:d:/actionSpring/chapter/chapter1/src/main/webapp/WEB-INF/viewspace-servlet.xml"})  这个注解可以整合多个spring配置文件中"file:d:/actionSpring/chapter/chapter1/src/main/webapp/WEB-INF/viewspace-servlet.xml"表示的是文件系统的形式给出配置文件
最新内容请见作者的GitHub页:http://qaseven.github.io/

Spring集成TestNg测试相关推荐

  1. spring集成testng

    spring整合testng需在spring配置文件中添加入下配置: <bean class="org.springframework.beans.factory.config.Pro ...

  2. Drools与Spring集成 登录测试

    http://justsee.iteye.com/blog/1279082 Drools5.2.0.Final与Spring3集成测试 在drools5.2,有一个jar包:drools-spring ...

  3. boot spring test 文档_Spring、Spring Boot 和 TestNG 测试指南 ( 3 )

    原标题:Spring.Spring Boot 和 TestNG 测试指南 ( 3 ) 来源:chanjarster, github.com/chanjarster/spring-test-exampl ...

  4. Spring集成文件轮询和测试

    我最近实施了一个小项目,在该项目中,我们必须轮询文件夹中的新文件,然后在文件内容上触发服务流. Spring Integration非常适合此要求,因为它带有一个通道适配器 ,该适配器可以扫描文件夹中 ...

  5. Spring的junit4测试集成

    Spring的junit测试集成 Spring提供spring-test-4.2.4.RELEASE.jar 可以整合junit. 优势:可以简化测试代码(不需要手动创建上下文,即手动创建spring ...

  6. Spring集成Redis方案(spring-data-redis)(基于Jedis的单机模式)(待实践)

    说明:请注意Spring Data Redis的版本以及Spring的版本!最新版本的Spring Data Redis已经去除Jedis的依赖包,需要自行引入,这个是个坑点.并且会与一些低版本的Sp ...

  7. windows api中文文档_Web服务开发:Spring集成Swagger,3步自动生成API文档

    目录: 1,Spring Boot集成Swagger 2,Swagger接口文档页面 3,常见问题和解决方法 在Sping开发REST接口服务时,API文档是不可缺少的一个重要部分.Swagger框架 ...

  8. Liferay7 BPM门户开发之5: Activiti和Spring集成

    参考文档: https://github.com/jbarrez/spring-boot-with-activiti-example https://github.com/sxyx2008/sprin ...

  9. 从零开始学 Java - Spring 集成 Memcached 缓存配置(二)

    Memcached 客户端选择 上一篇文章 从零开始学 Java - Spring 集成 Memcached 缓存配置(一)中我们讲到这篇要谈客户端的选择,在 Java 中一般常用的有三个: Memc ...

最新文章

  1. 理解ffmpeg中的pts,dts,time_base
  2. python数学建模可视化_数学建模之流程图和数据可视化
  3. I - 滑雪 POJ - 1088(深搜,记忆化搜索)
  4. 苹果应用上架遇到的问题(2017年4月27日)
  5. android怎么让图片显示在button上面_网上的图片不知道怎么批量下载?python教你怎么把网站上面的图片都爬下来...
  6. small - HTML元素
  7. C语言解释一下BA无标度网络
  8. 【UV打印机】PrintExp打印软件教程(六)-高级模式(马达)
  9. truncate table(截断表)
  10. 计算机上的闹钟怎么设置方法,pconline,教您电脑闹钟怎么设置
  11. 关于椰子汁的学问,你知道多少?
  12. 10、持续集成流水线实践:流水线建设从Jenkins部署开始
  13. egde被360导航劫持
  14. 微信小程序如何实现切换主题(更改皮肤)
  15. java抠图边框颜色处理_ps抠图边缘颜色怎么处理
  16. 公众号精选评论点赞_十大和编辑精选:六月评论
  17. Error while bringing up minion for multi-master.
  18. java动效_Animations开源动效分析(一)POP按钮动画
  19. 致远SPM之接待管理解决方案
  20. MySQL 5.7.17 Group Relication(组复制)搭建手册【转】

热门文章

  1. c# list 求交使用注意点
  2. Riding the Fences USACO 3.3 欧拉路径(dfs+floodfill)
  3. ie下LI的间距问题
  4. JMM内存模型如何为并发保驾护航
  5. 【跃迁之路】【497天】程序员高效学习方法论探索系列(实验阶段254-2018.06.17)...
  6. Citrix Provisioning Services 7.13企业实战
  7. Vue.js 插件开发详解
  8. 算法笔记_156:算法提高 6-17复数四则运算(Java)
  9. iOS8中提示框的使用UIAlertController(UIAlertView和UIActionSheet二合一)
  10. Servlet登陆功能的实现