[spring源码学习]单元测试演化
@RunWith(SpringJUnit4ClassRunner.class) //指定测试用例的运行器 这里是指定了Junit4
@ContextConfiguration("classpath:applicationContext.xml")
@TransactionConfiguration(transactionManager="transactionManager", defaultRollback=true)
@Transactional
public class TestUserDao {
@Autowired
private BaseDao<User, Long> userDao = null; @Test
@Rollback(true)//上面已经设置defaultRollback=true。这里其实可以不用写了
public void testModifyUser() {
User user = userDao.findById(2L);
System.out.println(user.getId());
user.setDisplayName("系统管理员4");
userDao.saveOrUpdate(user);
Assert.assertEquals(userDao.findById(2L).getDisplayName(), "系统管理员4");
}
}
我们可以看到一些spring-test的基本操作:
public class SimpleTest {  
    @Test
    public void simpleTest(){  
        //创建mock对象,参数可以是类,也可以是接口
        List<String> list = mock(List.class);  
        //设置方法的预期返回值
        when(list.get(0)).thenReturn("helloworld");  
        String result = list.get(0);  
        //验证方法调用(是否调用了get(0))
        verify(list).get(0);  
        //junit测试
        Assert.assertEquals("helloworld", result);
    }
} 
我们使用mock方法模拟了一个list,并将他的get(0)方法设定返回为"helloworld",如果有调用此方法时候,就会返回指定的调用值
spring-test与mock结合的测试案例写法
public class MockSpringTest extends BaseSpringTest {  
    @Autowired
    private OrderBefore orderBefore;  
    @InjectMocks
    private OrderCreate orderCreate = mock(OrderCreate.class);  
    @Mock
    private OrderHelper orderHelper;  
    @Autowired
    private OrderStart orderStart;  
    @Before
    public void initMocks() throws Exception {
        MockitoAnnotations.initMocks(this);  //对注解中的mock进行初始化
        ReflectionTestUtils.setField(AopTargetUtils.getTarget(orderStart), "orderCreate", orderCreate);  //AopTargetUtils为自定义的类,将属性注入到bean的方法内
        doReturn(11).when(orderCreate).getAmt();  //定义方法默认返回
        doReturn("success").when(orderHelper).resolve();   //定义方法默认返回
        doCallRealMethod().when(orderCreate).create();   //定义方法调用真实方法
    }  
    @Test
    public void create() {
        System.out.println("start mock...");
        //orderStart中注入了orderStart,orderStart中注入了orderCreate,
        //如果按照正常写法,会调用orderCreate的getAmt方法,但是我们之前使用了setFiled将方法将orderStart的属性替换为了mock类,所以可以看到执行结果为11
        orderBefore.before();
    }
}  
[spring源码学习]单元测试演化的更多相关文章
- spring源码学习之路---深入AOP(终)
		
作者:zuoxiaolong8810(左潇龙),转载请注明出处,特别说明:本博文来自博主原博客,为保证新博客中博文的完整性,特复制到此留存,如需转载请注明新博客地址即可. 上一章和各位一起看了一下sp ...
 - spring源码学习之路---IOC初探(二)
		
作者:zuoxiaolong8810(左潇龙),转载请注明出处,特别说明:本博文来自博主原博客,为保证新博客中博文的完整性,特复制到此留存,如需转载请注明新博客地址即可. 上一章当中我没有提及具体的搭 ...
 - Spring源码学习
		
Spring源码学习--ClassPathXmlApplicationContext(一) spring源码学习--FileSystemXmlApplicationContext(二) spring源 ...
 - Spring源码学习-容器BeanFactory(四) BeanDefinition的创建-自定义标签的解析.md
		
写在前面 上文Spring源码学习-容器BeanFactory(三) BeanDefinition的创建-解析Spring的默认标签对Spring默认标签的解析做了详解,在xml元素的解析中,Spri ...
 - Spring源码学习-容器BeanFactory(三) BeanDefinition的创建-解析Spring的默认标签
		
写在前面 上文Spring源码学习-容器BeanFactory(二) BeanDefinition的创建-解析前BeanDefinition的前置操作中Spring对XML解析后创建了对应的Docum ...
 - Spring源码学习-容器BeanFactory(二) BeanDefinition的创建-解析前BeanDefinition的前置操作
		
写在前面 上文 Spring源码学习-容器BeanFactory(一) BeanDefinition的创建-解析资源文件主要讲Spring容器创建时通过XmlBeanDefinitionReader读 ...
 - Spring源码学习-容器BeanFactory(一) BeanDefinition的创建-解析资源文件
		
写在前面 从大四实习至今已一年有余,作为一个程序员,一直没有用心去记录自己工作中遇到的问题,甚是惭愧,打算从今日起开始养成写博客的习惯.作为一名java开发人员,Spring是永远绕不过的话题,它的设 ...
 - 【目录】Spring 源码学习
		
[目录]Spring 源码学习 jwfy 关注 2018.01.31 19:57* 字数 896 阅读 152评论 0喜欢 9 用来记录自己学习spring源码的一些心得和体会以及相关功能的实现原理, ...
 - Spring 源码学习——Aop
		
Spring 源码学习--Aop 什么是 AOP 以下是百度百科的解释:AOP 为 Aspect Oriented Programming 的缩写,意为:面向切面编程通过预编译的方式和运行期动态代理实 ...
 
随机推荐
- hdu2005第几天?
			
Problem Description 给定一个日期,输出这个日期是该年的第几天. Input 输入数据有多组,每组占一行,数据格式为YYYY/MM/DD组成,具体参见sample input , ...
 - Wrong list
			
1.背包dp[i][j]无论当前物品是否不大于j都可以转移dp[i-1][j] 2.循环从0开始还是1开始的问题 3.无向图边集数组开两倍 4.(3*987654321) > maxint 4. ...
 - runtime理论知识
			
http://southpeak.github.io/2014/10/25/objective-c-runtime-1/ 转载http://www.jianshu.com/p/6b905584f536 ...
 - dom 无法找到 body节点问题
			
最近在学习html dom节点知识时候,对照代码自己敲了一边,始终获取不到文档中的body对象,代码如下(未修改前): <!doctype html> <html> <h ...
 - linux配置网卡IP地址命令详细介绍及一些常用网络配置命令
			
linux配置网卡IP地址命令详细介绍及一些常用网络配置命令2010-- 个评论 收藏 我要投稿 Linux命令行下配置IP地址不像图形界面下那么方 便,完全需要我们手动配置,下面就给大家介绍几种配置 ...
 - Unity   碰撞的例子
			
1.新建一个3D的Unity工程. 2.菜单 "GameObject" - "3D Object",选择"Cube" 和 "Cap ...
 - Shell 获取指定行的内容
			
需求: 有一个文件,根据指定的字符串,得到该字符串上两行的内容. 文件内容如下: linux-56:# cat sys.ttconnect.ini # Copyright (C) 1999, 2006 ...
 - [转]程序员趣味读物:谈谈Unicode编码
			
from : http://pcedu.pconline.com.cn/empolder/gj/other/0505/616631_all.html#content_page_1 这是一篇程序员写给程 ...
 - Erlang--proplists结构解析
			
proplists 模块适用数据量较少的场景,处理配置文件和函数选项时常用.proplists对内部数据结构是Key-Value键值对形式,第一个元素做key用来查询和删除,如果一个key有多个值就会 ...
 - MVC -- 后台RedirectToAction传递实体类与字符串
			
1.MVC -- 后台RedirectToAction传递实体类 RedirectToAction(控制器,控制器方法,实体类) 2.MVC -- 后台RedirectToAction传递字符串 Re ...