rpc使用JUnit模块测试设计的方法及常见问题

RPCRemote Procedure Call 远程过程调用java

Wikipediahttp://en.wikipedia.org/wiki/Remote_Procedure_Callgit

百度百科:http://baike.baidu.com/view/431455.htm?fr=aladdin程序员

 

用户关系的代码对应于RPC池子,对外提供的全部服务所有采用RPC的方式进行调用。服务器

此外,持续交付项目也须要对RPC服务进行自动化测试,因此引入了JUnit工程进行RPC测试。框架

 

JUnit:基于Java语言的一个单元测试框架。eclipse

Wikipediahttp://en.wikipedia.org/wiki/JUnitmaven

百度百科:http://baike.baidu.com/view/66926.htm单元测试

入门教程1http://www.ibm.com/developerworks/cn/java/j-lo-junit4/测试

入门教程2http://blog.csdn.net/xmlrequest/article/details/8983846spa

 

看完上面基本介绍和入门教程,应该已经生成写出一个给定类中所包含方法的JUnit测试模块 了。

而后就是在这个框架里根据须要写出相应的case。由于JUnit测试是一种单元测试,也是白盒测试,全部仍是有必要再耐心地看看如下一段文字:

 

单元测试碎碎念:

软件测试是软件构建过程当中很是重要的一环,测试能够完成许多事,但最重要的是能够衡量正在开发的软件的质量。有一种观点认为,在开发周期中,越早使测试成为投入的一部分越好。一个软件从代码编写开始就要面临这各类各样的测试,单元测试、集成测试、回归测试等等,其中与软件开发人员关系最紧密的就是单元测试。

  单元测试的主要目的是获取应用程序中可测试软件的最小片断,将其同代码的其他部分隔离开来,而后肯定它的行为是否与预期的同样。单元测试并不能保证程序是天衣无缝的,可是在全部的测试中,单元测试是第一个环节,也是最重要的一个环节。单元测试的对象是软件设计中的最小单位--模块,它是一种程序员对本身的代码进行自测试的工做,其测试依据就是软件模块的详细设计文档。单元测试一般采用白盒测试的方式,白盒测试也称结构测试或逻辑驱动测试,已知产品内部工做过程,经过测试来检测内部动做是否正常。测试按照程序内部结构进行,检验程序中的每条通路是否正确工做,而不顾它的功能。测试是从代码的路径结构和内部逻辑信息设计测试用例并覆盖所有代码、分支、路径、条件。 因此,单元测试的一个很重要的指标就是代码覆盖率,不少软件开发标准化组织都对单元测试的代码覆盖率有很明确的要求,低于标准就意味着单元测试不经过。

 

在用户关系的RPC测试用例编写中,要测试的对象就是一个个功能型接口(或说成方法),如添 getFollowersCount等。因此最直接的方法就是从接口参数着手,不一样参数逐个测试。

如下是在rpc测试中遇到的一些坑:

假设你已经正确地安装了jdk+eclipse+maven+git

1. 对于刚刚拉下来的、刚刚importeclipse中的代码:

gitclone到本地的代码中,须要经过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+Portxxx,能够在终端或者终端模拟器(secureCRT)上用ps -ef|grep xx看一下,该进程是否正常。若是已经被kill,最好从新起服务,具体步骤后面会交待。

 

2. 运行值和指望值不一致。在对接口测试时,通常会乃至JUnitassertThat()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);

 

 

先写这几个容易处理的,后面慢慢补充~

相关文章
相关标签/搜索