jaunt299

导航

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

RPCRemote Procedure Call 远程过程调用

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

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

 

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

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

 

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

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

百度百科:http://baike.baidu.com/view/66926.htm

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

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

 

看完上面基本介绍和入门教程,应该已经生成写出一个给定类中所包含方法的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);

 

 

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

posted on 2014-08-27 16:08  jaunt299  阅读(1521)  评论(0编辑  收藏  举报