[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 的缩写,意为:面向切面编程通过预编译的方式和运行期动态代理实 ...
随机推荐
- [Machine Learning] logistic函数和softmax函数
简单总结一下机器学习最常见的两个函数,一个是logistic函数,另一个是softmax函数,若有不足之处,希望大家可以帮忙指正.本文首先分别介绍logistic函数和softmax函数的定义和应用, ...
- Linux 下安装JRuby
安装ruby cd git clone https://github.com/rbenv/rbenv.git ~/.rbenv echo 'export PATH="$HOME/.rbenv ...
- CSS实现可变行数垂直居中
<html> <head> <style> .vcenter { position: relative; height: 100%; width:50px; } . ...
- javascript (2)
1.javascript作为一种脚本语言可以放在html页面中任何位置,但是浏览器解释html时是按先后顺序的,所以前面的script就先被执行.比如进行页面显示初始化的js必须放在head里面,因为 ...
- JS 深浅拷贝
首先理解概念 浅拷贝: 只复制对象的基本类型, 对象类型, 仍属于原来的引用. 深拷贝: 不紧复制对象的基本类, 同时也复制原对象中的对象.就是说完全是新对象产生的. 首先看浅拷贝 //浅拷贝 var ...
- 理解Angular中的$apply()以及$digest()
$apply()和$digest()在AngularJS中是两个核心概念,但是有时候它们又让人困惑.而为了了解AngularJS的工作方式,首先需要了解$apply()和$digest()是如何工作的 ...
- 部署React+webpack工程的步骤
# 部署React+webpack工程的步骤ps:以Mac os系统做开发环境.因为npm现在使用灰常的慢,所以我使用淘宝境像cnpm. 1,准备工作: 先确保存已经安装了node.js: 2,文件部 ...
- Okhttp3的简单使用
1.get请求: /** * *okhttp get请求 * */ public class MainActivity extends AppCompatActivity { private stat ...
- erlang 在线生成crashdump
一般说来抓dump 4种 方式: 1. erlang:halt(“abort”). 2. 在erlang shell下输入CTRL C + “大写的A” 3.等着进程崩溃 ...
- DNS解析过程详解
先说一下DNS的几个基本概念: 一. 根域 就是所谓的“.”,其实我们的网址www.baidu.com在配置当中应该是www.baidu.com.(最后有一点),一般我们在浏览器里输入时会省略后面的点 ...