单元测试代码:SpringTest+JUnit
/**
* JUnit单元测试父类,配置了Spring的基础环境。 <br/>
* 可以作为Controller、Service、Dao单元测试的父类。
*
* @author leiwen@fansunion.cn
*/
public class JUnitTestBase { public static XmlWebApplicationContext context = null; private static HandlerMapping handlerMapping;
private static HandlerAdapter handlerAdapter; // /public static String[] CONFIG_FILES = { "classpath:spring-*.xml" }; // public static String[] configs = { "file:src/main/resources/spring-*.xml"
// };
public static String[] CONFIG_FILES = { "file:src/main/resources/spring-*.xml" }; /**
* 读取spring配置文件,初始化上下文。
*/
@BeforeClass
public static void setUp() {
System.out.println("Test start..."); context = new XmlWebApplicationContext();
context.setConfigLocations(CONFIG_FILES); MockServletContext msc = new MockServletContext();
context.setServletContext(msc);
context.refresh();
msc.setAttribute(
WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE,
context); handlerMapping = (HandlerMapping) context
.getBean(DefaultAnnotationHandlerMapping.class);
handlerAdapter = (HandlerAdapter) context.getBean(context
.getBeanNamesForType(AnnotationMethodHandlerAdapter.class)[0]); } // 执行request对象请求的action
public ModelAndView excuteAction(HttpServletRequest request,
HttpServletResponse response) throws Exception {
// 这里需要声明request的实际类型,否则会报错
request.setAttribute(HandlerMapping.INTROSPECT_TYPE_LEVEL_MAPPING, true); HandlerExecutionChain chain = handlerMapping.getHandler(request);
Object handler = chain.getHandler();
final ModelAndView model = handlerAdapter.handle(request, response,
handler);
return model;
} @AfterClass
public static void tearUp() {
System.out.println("Test end!");
} } //测试Controller的2种方法 /**
* CampaignGroupController单元测试。
*
* @author leiwen@fansunion.cn
*/
public class FansUnionControllerTestextends JUnitTestBase { @Test
public void prevAddCampaignGroup() throws Exception {
MockHttpServletRequest request = new MockHttpServletRequest();
MockHttpServletResponse response = new MockHttpServletResponse();
String requestURI = "/campaignGroup/prevAdd";
request.setRequestURI(requestURI);
request.setMethod("POST");
final ModelAndView mav = this.excuteAction(request, response);
Assert.assertEquals("createCampaignGroup", mav.getViewName()); } @Test
public void prevAddCampaignGroup2() throws Exception {
CampaignGroupController userController = context.getBean(CampaignGroupController.class);
MockMvc mockMvc = MockMvcBuilders.standaloneSetup(userController)
.build();
ResultActions perform = mockMvc.perform(MockMvcRequestBuilders.post("/campaignGroup/prevAdd"));
ResultActions andExpect = perform
.andExpect(MockMvcResultMatchers.status().is(200));
andExpect
.andExpect(
MockMvcResultMatchers.view()
.name("createCampaignGroup"));
} } ----需要配置2个bean,测试Controller需要用到 <bean
class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
</bean>
<bean
class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
</bean> 测试Service(Dao类似) /**
* 这种方式 的单元测试,不需要重复指定 资源文件,减少重复。 麻烦的地方在于,需要手动获取bean。
*
* @author leiwen@fansunion.cn
*/
public class FansUnionServiceTest extends JUnitTestBase { private static CampaignGroupService campaignGroupService = context
.getBean(CampaignGroupService.class); // 测试add,remove,update方法的时候,已经测试了find?
@Test
public void addCampaignGroup() {
CampaignGroup cg = buildOneGroup(); campaignGroupService.add(cg); CampaignGroup dbCampaignGroup = campaignGroupService.find(cg.getId());
Assert.assertEquals(cg, dbCampaignGroup);
campaignGroupService.delete(cg.getId());
} 基于注解的测试 /**
*
* 基于注解的单元测试。
*
* @author leiwen@fansunion.cn
*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath:spring-mvc-context.xml",
"classpath:spring-common-context.xml" })
public class FansUnionServiceTestWithAnnotation { @Autowired
private CampaignGroupService campaignGroupService; /**
* 根据campaignId获取campaignGroup的name集合<br>
* 测试场景:<br>
*
*/
@Test
public void testListCampaignGroupNameByCampaignId(){
System.out.println("**********");
System.out.println(campaignGroupService.listCampaignGroupNameByCampaignId(1005899));
} }
参考资料:http://lohasle.iteye.com/blog/1617929
http://jiuyuehe.iteye.com/blog/1882424
单元测试代码:SpringTest+JUnit的更多相关文章
- JUnit编写单元测试代码注意点小结
用eclipse编写单元测试的时候,可以直接选中某个类,然后右键new新疆一个junit case,界面如下图1所示: 图1:新建test case 选 择图1中的JUnit Test Case,然后 ...
- 在Android Studio进行“简单配置”单元测试(Android Junit)
起因 在Android studio 刚出.本人就想弄单元测试,可惜当时Android studio不知道抽什么风(准确来说,应该是我不会弄而已).无法执行到相应的代码.后来今天突然自己又抽风.又想去 ...
- 单元测试系列:JUnit单元测试规范
更多原创测试技术文章同步更新到微信公众号 :三国测,敬请扫码关注个人的微信号,感谢! 原文链接:http://www.cnblogs.com/zishi/p/6762032.html Junit测试代 ...
- 单元测试简介和Junit的使用介绍
单元测试简介和Junit的使用介绍 Junit是Java开发中用来支持单元测试的一个软件,这里对它的基本情况.使用方法等做简单的介绍. 提纲 1.软件测试 2.单元测试概述 3.单元测试的具体做法 4 ...
- 真正意义上的spring环境中的单元测试方案spring-test与mokito完美结合
真正意义上的spring环境中的单元测试方案spring-test与mokito完美结合 博客分类: java 测试 单元测试SpringCC++C# 一.要解决的问题: spring环境中 ...
- python的单元测试代码编写流程
单元测试: 单元测试是对单独的代码块分别进行测试, 以确保它们的正确性, 单元测试主要还是由开发人员来做, 其余的集成测试和系统测试由专业的测试人员来做. python的单元测试代码编写主要记住以下几 ...
- 编写高质量代码改善C#程序的157个建议——建议155:随生产代码一起提交单元测试代码
建议155:随生产代码一起提交单元测试代码 首先提出一个问题:我们害怕修改代码吗?是否曾经无数次面对乱糟糟的代码,下决心进行重构,然后在一个月后的某个周一,却收到来自测试版的报告:新的版本,没有之前的 ...
- Spring整合JUnit框架进行单元测试代码使用详解
一.Spring提供的JUnit框架扩展: 1. AbstractSpringContextTests:spring中使用spring上下文测试的Junit扩展类,我们一般不会使用这个类来进行单元 ...
- JUnit单元测试代码
package com.storage.test; import org.junit.Before; import org.junit.Test; import org.springframework ...
随机推荐
- git出错调试
https://stackoverflow.com/questions/6178401/how-can-i-debug-git-git-shell-related-problems git_trace ...
- (转)dp动态规划分类详解
dp动态规划分类详解 转自:http://blog.csdn.NET/cc_again/article/details/25866971 动态规划一直是ACM竞赛中的重点,同时又是难点,因为该算法时间 ...
- spring:利用Spring AOP 使日志输入与方法分离
对方法进行日志输出是一种很常见的功能.传统的做法是把输出语句写在方法体的内部,在调用该方法时,用输入语句输出信息来记录方法的执行! 1.先写一个普通类: package com.importnew; ...
- getField();在TP5里成什么了?
拆分为value和column了 $comps=db("company")->where(array("areaid"=>$areaid))-> ...
- linux ssh文件输
在linux下一般用scp这个命令来通过ssh传输文件. 1.从服务器上下载文件scp username@servername:/path/filename /var/www/local_dir(本地 ...
- Python生成器(yield)
对于调用一个普通的Python函数,一般是从函数的第一行代码开始执行,结束于return语句.异常或者函数所有语句执行完毕.一旦函数将控制权交还给调用者,就意味着全部结束.函数中做的所有工作以及保存在 ...
- 9 在C#控制台程序(console)中让用户输入
经过前面那些练习,我们已经熟悉录入一些简单的代码.这些代码可以进行一些简单的运算,在dos窗口打印出一些东西出来.我们现在要开始学习如何把数据从外部输入到我们的程序中. 其实大多数程序的工作是完成下面 ...
- Eclipse的菜单简介
在Eclipse工作台的上方提供了菜单栏,该菜单栏包含了实现Eclipse各项功能的命令,并且与编辑器相关,即菜单栏中的菜单项与当前编辑器内打开的文件是关联的.例如,编辑器内没有打开任何文件,那么,将 ...
- Android开发笔记(13)——ListFragment
转载请注明:http://www.cnblogs.com/igoslly/p/6959108.html ListFragment ListFragment是继承于Fragment的类,专门用于包含Li ...
- php加密方法有哪些
1. MD5加密 string md5 ( string $str [, bool $raw_output = false ] ) 参数 str -- 原始字符串. raw_output -- 如果可 ...