基于Spring Test和Mockito进行单元测试
本文引入一个简单的银行业务场景,用来阐述如何集成Spring Test、Junit、Mockito,以简化单元测试工作。该场景主要的业务代码如下:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
/** * 人员 */ public class Person { private int id; private String name; private Account defaultAccount; } /** * 账户 */ public class Account { private int id; private int balance; private Person person; } /** * 人员服务接口 * */ public interface PersonService { /** * 查询人员用户 */ Person getPerson( int id ); /** * 得到人员默认账户 */ Account getDefaultAccount( Person p ); } /** * 账户服务接口 * */ public interface AccountService { /** * 查询人员默认账户余额 */ int queryBalanceOfDefaultAccount( int personId ); } |
假设你已经实现了服务AccountService:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
@Service ( "accountService" ) public class AccountServiceImpl implements AccountService { private Map<Integer, Object[]> accountDatabase; @Inject private PersonService personService; @PostConstruct public void init() { accountDatabase = new HashMap<Integer, Object[]>(); //字段:账号,余额 accountDatabase.put( 100, new Object[] { "6225100", 68861 } ); accountDatabase.put( 101, new Object[] { "6225101", 1851 } ); accountDatabase.put( 102, new Object[] { "6225102", 845 } ); accountDatabase.put( 103, new Object[] { "6225103", 16598 } ); } @Override public int queryBalanceOfDefaultAccount( int personId ) { Person person = personService.getPerson( personId ); Account defaultAccount = person.getDefaultAccount(); return (Integer) accountDatabase.get( defaultAccount.getId() )[1]; } } |
而你的搭档负责的PersonService还没有开发完毕,如何方便的进行单元测试呢?
你可能会觉得,我们不需要在单元测试中引入Spring。对于上面的例子的确可以这么说,它太简单了,AccountServiceImpl 依赖的PersonService完全可以通过setter手工注入。但是实际的开发场景要比这个例子复杂的多,待测试类可能和S…
阅读全文KVM和QEMU学习笔记
Hypervisor,即虚拟机监管程序(virtual machine monitor ,VMM)。它可以是电脑上的软件、固件或者硬件,用于建立和执行虚拟机。拥有Hypervisor后,你可以执行一个或者多个虚拟机。这些虚拟机称为客户机(guest mac…
阅读全文类UNIX系统下使用Dnsmasq
Dnsmasq是一个轻量级的DHCP服务器、DNS缓存服务器。它可以提供本地的DNS服务,把不能解析的请求转交给上级DNS处理。
Dnsmasq可以读取/etc/hosts文件中的条目,来作域名解析。
可以通过Homebrew安装:
|
1 |
brew install dnsmasq |
创建配置文件:
|
1 2 |
mkdir -pv $(brew --prefix)/etc/ touch $(brew --prefix)/etc/dnsmasq.conf |
修改网络配置中的DNS配置,将127.0.0.1放到DNS列表的最前面。
通常Ubuntu已经自带了此软件…
阅读全文Spring对JMS的支持
Spring 提供了JMS的集成,简化JMS的使用,提供的API封装类似于Spring的JDBC集成。
JMS的功能大体上分为两类——接收、发送消息。Spring提供了:
- JmsTemplate来完成消息的发送、同步接收
- 消息监听器容器(message li…
libvirt学习笔记
libvirt是广泛使用的、通用虚拟化管理工具,它提供多种命令行工具、多种语言的编程API。
libvirt的目标是:提供一个通用、稳定的抽象层,来安全有效的远程管理一个节点(node)之上的域(domains),因此它需要提供全套的API来完成管理,这…
阅读全文2015年7月架构师培训笔记
本文对我最近参加的架构师培训内容进行整理记录。
| 问题 | 分析与初步解决方案 |
| 技术选型困难,新框架适用性、使用难点,对开源技术不了解 |
今天在整个行业中,一个明显的趋势是:正在从厂家的产品转向开源的应用。开源框架百花齐放、缺少完善的培训… |
Mac OS X知识集锦
| 快捷键 | 说明 |
| Cmd + Shift + . | 隐藏或者显示UNIX隐藏文件 |
| Cmd + Tab | 在所有窗口之间切换 |
| Cmd + ~ | 在应用程序的不同窗口之间切换 |
| Cmd + Backspace | 删除文件 |
| Cmd + Shift + Backspace | 清空回收站… |
基于tc的网络QoS管理
tc(traffic control)是Linux自带的、功能强大的网络QoS管理/流量塑形工具,利用它,我么可以进行带宽限制、模拟网络延迟和抖动。
本质上,tc是内核封包调度器的配置工具。
排队规则,管理设备队列的算法,可以管理ingres…
阅读全文