rpc使用JUnit模块测试设计的方法及常见问题
RPC:Remote Procedure Call 远程过程调用
Wikipedia:http://en.wikipedia.org/wiki/Remote_Procedure_Call
百度百科:http://baike.baidu.com/view/431455.htm?fr=aladdin
用户关系的代码对应于RPC池子,对外提供的所有服务全部采用RPC的方式进行调用。
此外,持续交付项目也需要对RPC服务进行自动化测试,所以引入了JUnit工程进行RPC测试。
JUnit:基于Java语言的一个单元测试框架。
Wikipedia:http://en.wikipedia.org/wiki/JUnit
百度百科:http://baike.baidu.com/view/66926.htm
入门教程1:http://www.ibm.com/developerworks/cn/java/j-lo-junit4/
入门教程2:http://blog.csdn.net/xmlrequest/article/details/8983846
看完上面基本介绍和入门教程,应该已经生成写出一个给定类中所包含方法的JUnit测试模块 了。
然后就是在这个框架里根据需要写出相应的case。因为JUnit测试是一种单元测试,也是白盒测试,所有还是有必要再耐心地看看以下一段文字:
单元测试碎碎念:
软件测试是软件构建过程中非常重要的一环,测试可以完成许多事,但最重要的是可以衡量正在开发的软件的质量。有一种观点认为,在开发周期中,越早使测试成为投入的一部分越好。一个软件从代码编写开始就要面临这各种各样的测试,单元测试、集成测试、回归测试等等,其中与软件开发人员关系最紧密的就是单元测试。
单元测试的主要目的是获取应用程序中可测试软件的最小片段,将其同代码的其余部分隔离开来,然后确定它的行为是否与预期的一样。单元测试并不能保证程序是完美无缺的,但是在所有的测试中,单元测试是第一个环节,也是最重要的一个环节。单元测试的对象是软件设计中的最小单位--模块,它是一种程序员对自己的代码进行自测试的工作,其测试依据就是软件模块的详细设计文档。单元测试通常采用白盒测试的方式,白盒测试也称结构测试或逻辑驱动测试,已知产品内部工作过程,通过测试来检测内部动作是否正常。测试按照程序内部结构进行,检验程序中的每条通路是否正确工作,而不顾它的功能。测试是从代码的路径结构和内部逻辑信息设计测试用例并覆盖全部代码、分支、路径、条件。 所以,单元测试的一个很重要的指标就是代码覆盖率,很多软件开发标准化组织都对单元测试的代码覆盖率有很明确的要求,低于标准就意味着单元测试不通过。
在用户关系的RPC测试用例编写中,要测试的对象就是一个个功能型接口(或说成方法),如添 getFollowersCount等。所以最直接的方法就是从接口参数着手,不同参数逐个测试。
以下是在rpc测试中遇到的一些坑:
假设你已经正确地安装了jdk+eclipse+maven+git
1. 对于刚刚拉下来的、刚刚import到eclipse中的代码:
从git上clone到本地的代码中,需要通过maven来下载它的依赖如形形色色的jar包。
(win7版本)比如你从git上拉到的是graph.test这个代码包,要先打开这个文件夹,然后shift+右键,然后选择“在此处打开命令窗”(当然你也可以先打开命令窗然后再切到该目录,个人喜欢这种方式啦)~
然后输入 mvn clean eclipse:clean eclipse:eclipse,回车
慢慢等待结束
然后回到eclipse选中graph.test工程,右键→refresh一下就可以了。
看完上面的百科和教程,你应该会对已有的类生成、编写和运行junit case了~这些是你很可能在运行过程中遇到的问题:
1. timeout,这应该是最温柔的一个错误了,只要耐心再运行几下就OK了。
当然如果整个测试类中运行run as junit,所有的case都报timeout 错误,那么很有可能是服务器上的rpc服务被kill了,rpc测试的服务器IP+Port为xxx,可以在终端或者终端模拟器(secureCRT)上用ps -ef|grep xx看一下,该进程是否正常。如果已经被kill,最好重新起服务,具体步骤后面会交待。

2. 运行值和期望值不一致。在对接口测试时,一般会乃至JUnit的assertThat()和assertEquals()等判断方法。如果出现以下问题,就要先想想出现这种结果的合理性。如果确定期望值是合理的,那就说明接口返回值可能有问题,应该将此情况标记起来,待评测时与开发沟通后解决。只有接口返回值与合理的期望值吻合时,测试才能通过。


3. NullPointerException. 请不要惊讶Java中没有指针的概念 为嘛还会有这种错误,事实上,在我们的测试中这个错误极其常见。
这时可以用ExpectedException这个类来解决,在整个测试类的前部先这个定义:
@Rule
public ExpectedException thrown = ExpectedException.none();
然后在当前@Test测试模块中对抛出NullPointerException异常的调用(如groupService.getGroupMembersReasons(fromUid, groupId, null))这样处理:
thrown.expect(NullPointerException.class);
groupService.getGroupMembersReasons(fromUid, groupId, null);

先写这几个容易处理的,后面慢慢补充~
rpc使用JUnit模块测试设计的方法及常见问题的更多相关文章
- 使用java泛型设计通用方法
		泛型是Java SE 1.5的新特性, 泛型的本质是参数化类型, 也就是说所操作的数据类型被指定为一个参数. 因此我们可以利用泛型和反射来设计一些通用方法. 现在有2张表, 一张user表和一张stu ... 
- junit中的assert方法总结
		junit中的assert方法全部放在Assert类中,总结一下junit类中assert方法的分类.1.assertTrue/False([String message,]boolean condi ... 
- 设计一个方法injectBeforeAsyncSend,能够实现如下功能:在发起异步请求之前打印出请求的类型、URL、method、body、timestamp 等信息。
		异步请求逻辑注入 工作中我们需要对异步请求的请求信息打印日志,但是又不能耦合在业务代码中打印.请设计一个方法injectBeforeAsyncSend,能够实现如下功能:在发起异步请求之前打印出请求的 ... 
- Atitit.编程语言原理---方法重载的实现与设计 调用方法的原理
		Atitit.编程语言原理---方法重载的实现与设计 调用方法的原理 1. 重载包括:普通方法的重载和构造方法的重载 1 1.1. 横向重载”和“纵向重载”1 1.2. 方法签名通过 方法名称,参数 ... 
- web手工项目03-登录功能测试用例及缺陷编写-流程图画法-前后台下单及发货流程图-流程图设计测试用例方法-功能测试涉及到的四种数据库场景
		回顾 注册功能测试(步骤,需求分析(输入分析,处理分析,输出分析),数据构造(有效等价类,无效等价类,有效数据,无效数据),编写用例,执行用例,缺陷报告) 轮播图功能测试(步骤,需求分析拆分测试点,测 ... 
- 实现一个名为Person的类和它的子类Employee,Manager是Employee的子类,设计一个方法add用于涨工资,普通员工一次能涨10%,经理能涨20%。
		1.实现一个名为Person的类和它的子类Employee,Manager是Employee的子类,设计一个方法add用于涨工资,普通员工一次能涨10%,经理能涨20%.具体要求如下:(1)Perso ... 
- .NET Excel导出方法及其常见问题详解
		摘要:.NET Excel导出方法及其常见问题详解. 一.Excel导出的实现方法 在.net 程序开发中,对于Excel文件的导出我们一共有三种导出方式: 利用文件输出流进行读写操作 这种方式的导出 ... 
- wdcp的安装方法与常见问题
		wdcp(WDlinux Control Panel)是一套用PHP开发的Linux服务器管理系统,通过面板来操作可以彻底放弃用ssh 命令来操作的繁琐,让Linux服务器系统变得更容易使用,可以在线 ... 
- 【drp 11】使用Junit简单测试接口方法
		一.Junit简介 JUnit是一个Java语言的单元测试框架.它由Kent Beck和Erich Gamma建立,逐渐成为源于Kent Beck的sUnit的xUnit家族中最为成功的一个. JUn ... 
随机推荐
- Memcached的使用
			为什么要使用Memcached? 1)高并发访问数据库的痛:死锁 2)磁盘IO之痛 3)读写性能完美 4)超简单的集群搭建Cluster 5)开源 6)性能最佳 7)丰富的成功案例 Memcached ... 
- tar 解压常用压缩文件格式命令大全
			常用压缩文件格式就那么几种,解压命令总结在此: 1 2 3 4 5 6 7 8 tar xzf filename.tar.gz tar xjf filename.tar.bz2 tar xzf f ... 
- [教程] [承風雅傳HSU]用ES4封裝Win7---ES4 Win7封裝教程(未完待續)
			[教程] [承風雅傳HSU]用ES4封裝Win7---ES4 Win7封裝教程(未完待續) a10036it 发表于 2015-7-27 21:11:19 https://www.itsk.com/t ... 
- Python之路 day2 按行读文件
			#1. 最基本的读文件方法: # File: readline-example-1.py file = open("sample.txt") while 1: line = fil ... 
- JQuery实现table分页
			1.直接贴代码: ; //每页显示的记录条数 ; //显示第curPage页 var len; //总行数 var page; //总页数 $(function(){ len =$(; //去掉表头 ... 
- 设置默认python模块源
			可以在Linux编辑~/.pip/pip.conf或者在Windows下编辑%HOME%\pip\pip.ini,内容如下:[global]index-url = http://pypi.douban ... 
- 遇到bug怎么办
			最近第一个完整的项目的第一期快完成了.期间,我怀疑过无数次人生,给难兄难弟辣椒相互吐槽过.被我师父点播后觉得人和人差距怎么可以这么大数次. 终于!基本功能实现了. 今天不总结具体问题了,说一下调试过程 ... 
- 2016.9.27 ---  changchun
			1001 Hanzo vs. Genji 1002 Fraction 1003 Rotate String 1004 Triangle 1005 The Fastest Runner Ms. Zhan ... 
- qml中打开本地html
			main.cpp QString tmploc = QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation); QDi ... 
- 【FPGA】相关介绍
			什么是 FPGA ? FPGA是Field Programmable Gate Array的缩写,即现场可编程门阵列,它是在PAL.GAL.EPLD等可编程器件的基础上进一步发展的产物.它是作为专用集 ... 
