`
linkyou66
  • 浏览: 228150 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

单元测试覆盖工具coverlipse

 
阅读更多
<p></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span style="">我的工作经常会遇到这样的问题,统计自动化覆盖率,以前做</span><span lang="EN-US"><span style="font-family: Calibri;">windows</span></span><span style="">的程序可以用</span><span lang="EN-US"><span style="font-family: Calibri;">ibm</span></span><span style="">的</span></span><span style="color: #000000;"><span style="" lang="EN-US">Codecover</span><span style="">来实现这种功能,但是对于互联网应用服务器端代码覆盖率的统计一直没有找到好的方法,前阵子听说了</span><span style="" lang="EN-US">coerlipse</span><span style="">,今天就预研了一下,虽然没有达到我的目的(无法实现对远程服务器端代码覆盖率的统计,只能完成本地做单元测试的覆盖率统计)。但是还是把学习过程记录一下,说不定以后有用哦。</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="color: #000000;"><span style="" lang="EN-US"><span style=""> </span></span><span style="">首先,需要到</span><span style="" lang="EN-US"><a href="http://coverlipse.sourceforge.net/download.php">http://coverlipse.sourceforge.net/download.php</a></span><span style="">下载插件,该网站提供两种方式,一种是通过</span><span style="" lang="EN-US">eclipse</span><span style="">更新插件地址去更新他的插件,一种是将插件先下载过来手工安装。</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="color: #000000;"><span style="" lang="EN-US"><span style=""> </span></span><span style="">手工安装的方法,自然和其他安装插件方法一样,完成如下三步:</span></span></p>
<p class="MsoListParagraph" style=""><span style="color: #000000;"><span style="" lang="EN-US"><span style="">一,</span></span><span style="">解压插件包,关闭</span><span style="" lang="EN-US">eclipse</span></span><span style=""><span style="color: #000000;">程序</span>。</span></p>
<p class="MsoListParagraph" style=""><span style="" lang="EN-US"><span style=""><span style="font-size: small; font-family: Calibri;">二,</span><span style='font: 7pt "Times New Roman";'> </span></span></span><span style="font-size: small;"><span style="">将插件包中的</span><span lang="EN-US"><span style="font-family: Calibri;">plugin</span></span><span style="">目录下的文件拷贝到你</span><span lang="EN-US"><span style="font-family: Calibri;">eclipse</span></span><span style="">安装目录下的</span><span lang="EN-US"><span style="font-family: Calibri;">plugin</span></span><span style="">目录下</span><span lang="EN-US"><span style="font-family: Calibri;">;</span></span><span style="">把</span><span lang="EN-US"><span style="font-family: Calibri;">features</span></span><span style="">下的</span><span lang="EN-US"><span style="font-family: Calibri;">xml</span></span><span style="">文件拷贝到你</span><span lang="EN-US"><span style="font-family: Calibri;">elipse</span></span><span style="">安装路径的</span><span lang="EN-US"><span style="font-family: Calibri;">features</span></span><span style="">目录下。</span></span></p>
<p class="MsoListParagraph" style=""><span style="" lang="EN-US"><span style=""><span style="font-size: small; font-family: Calibri;">三,</span><span style='font: 7pt "Times New Roman";'> </span></span></span><span style="font-size: small;"><span style="">启动</span><span lang="EN-US"><span style="font-family: Calibri;">eclipse,</span></span><span style="">点击</span><span lang="EN-US"><span style="font-family: Calibri;">help-&gt;abaout Eclipse platform</span></span><span style="">属性页,可以通过</span><span lang="EN-US"><span style="font-family: Calibri;">plugin-detail</span></span><span style="">查看你的插件是否被安装成功了。</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 21pt;"><span style=""><span style="font-size: small;">现在我们要做单元测试的简单实验了,当然我们首先要新建一个被测工程,一个被测类,一个测试类。在本例子中分别命名如下</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 21pt;"><span style="font-size: small;"><span lang="EN-US"><span style=""><span style="font-family: Calibri;"> </span></span></span><span style="">测试工程</span><span lang="EN-US"><span style="font-family: Calibri;">:Mytest</span></span><span style="">。由于是单元测试工具通常测试工程和被测工程在同一个工程中。根据我对</span><span lang="EN-US"><span style="font-family: Calibri;">coverlipse</span></span><span style="">的简单研究,似乎也必须在同一个工程内。</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 21pt;"><span style="font-size: small;"><span lang="EN-US"><span style=""><span style="font-family: Calibri;"> </span></span></span><span style="">被测试类</span><span lang="EN-US"><span style="font-family: Calibri;">:</span></span></span><span style='font-size: 10pt; background: silver; color: black; font-family: "Courier New";' lang="EN-US"> helloworld</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 21pt;"><span style='font-size: 10pt; color: black; font-family: "Courier New";' lang="EN-US"><span style=""> </span></span><span style="">被测代码如下:</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 21pt;"><span style='font-size: 10pt; color: black; font-family: "Courier New";' lang="EN-US"><span style=""> </span></span></p>
<p>
</p>
<table class="MsoTableGrid" style="margin: auto auto auto 21pt; border-collapse: collapse;" border="1" cellspacing="0" cellpadding="0"><tbody><tr style="">
<td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; width: 426.1pt; padding-top: 0cm; background-color: transparent; border: black 1pt solid;" width="568" valign="top">
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><strong><span style='font-size: 10pt; color: #7f0055; font-family: "Courier New";' lang="EN-US">01<span style=""> </span>package testp;</span></strong></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><strong><span style='font-size: 10pt; color: #7f0055; font-family: "Courier New";' lang="EN-US">02<span style=""> </span></span></strong></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><strong><span style='font-size: 10pt; color: #7f0055; font-family: "Courier New";' lang="EN-US">03<span style=""> </span>public class helloworld {</span></strong></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><strong><span style='font-size: 10pt; color: #7f0055; font-family: "Courier New";' lang="EN-US">04<span style=""> </span>public String SayHelloWorld(String a)</span></strong></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><strong><span style='font-size: 10pt; color: #7f0055; font-family: "Courier New";' lang="EN-US">05<span style=""> </span>{</span></strong></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><strong><span style='font-size: 10pt; color: #7f0055; font-family: "Courier New";' lang="EN-US">06<span style=""> </span>if (a !="") </span></strong></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><strong><span style='font-size: 10pt; color: #7f0055; font-family: "Courier New";' lang="EN-US">07<span style=""> </span>{</span></strong></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><strong><span style='font-size: 10pt; color: #7f0055; font-family: "Courier New";' lang="EN-US">08<span style=""> </span>return a + " helloworld";</span></strong></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><strong><span style='font-size: 10pt; color: #7f0055; font-family: "Courier New";' lang="EN-US">09<span style=""> </span>}</span></strong></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><strong><span style='font-size: 10pt; color: #7f0055; font-family: "Courier New";' lang="EN-US">10<span style=""> </span>else</span></strong></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><strong><span style='font-size: 10pt; color: #7f0055; font-family: "Courier New";' lang="EN-US">11<span style=""> </span>{</span></strong></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><strong><span style='font-size: 10pt; color: #7f0055; font-family: "Courier New";' lang="EN-US">12<span style=""> </span>return "please input username";</span></strong></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><strong><span style='font-size: 10pt; color: #7f0055; font-family: "Courier New";' lang="EN-US">13<span style=""> </span>}</span></strong></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><strong><span style='font-size: 10pt; color: #7f0055; font-family: "Courier New";' lang="EN-US">14<span style=""> </span>}</span></strong></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span style='font-size: 10pt; color: #7f0055; font-family: "Courier New";' lang="EN-US">15<span style=""> </span>}</span></strong></p>
</td>
</tr></tbody></table>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 21pt;"><span style="font-size: small;"><span lang="EN-US"><span style=""><span style="font-family: Calibri;"> </span></span></span><span style="">测试类</span><span lang="EN-US"><span style="font-family: Calibri;">:testhelloworld</span></span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 21pt;"><span style="font-size: small;"><span lang="EN-US"><span style=""><span style="font-family: Calibri;"> </span></span></span><span style="">测试类代码如下</span><span lang="EN-US"><span style="font-family: Calibri;">:</span></span></span></p>
<p>
</p>
<table class="MsoTableGrid" style="margin: auto auto auto 21pt; border-collapse: collapse;" border="1" cellspacing="0" cellpadding="0"><tbody><tr style="">
<td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; width: 426.1pt; padding-top: 0cm; background-color: transparent; border: black 1pt solid;" width="568" valign="top">
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><strong><span style='font-size: 10pt; color: #7f0055; font-family: "Courier New";' lang="EN-US">1<span style=""> </span>public class testhelloworld extends TestCase {</span></strong></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><strong><span style='font-size: 10pt; color: #7f0055; font-family: "Courier New";' lang="EN-US">2<span style=""> </span>@Test</span></strong></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><strong><span style='font-size: 10pt; color: #7f0055; font-family: "Courier New";' lang="EN-US">3<span style=""> </span>public void testCase1() throws Exception</span></strong></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><strong><span style='font-size: 10pt; color: #7f0055; font-family: "Courier New";' lang="EN-US">4<span style=""> </span>{</span></strong></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><strong><span style='font-size: 10pt; color: #7f0055; font-family: "Courier New";' lang="EN-US">5<span style=""> </span>helloworld hw = new helloworld();</span></strong></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><strong><span style='font-size: 10pt; color: #7f0055; font-family: "Courier New";' lang="EN-US">6<span style=""> </span>String rs = hw.SayHelloWorld("elbert");</span></strong></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><strong><span style='font-size: 10pt; color: #7f0055; font-family: "Courier New";' lang="EN-US">7<span style=""> </span>org.junit.Assert.assertEquals("elbert helloworld", rs);</span></strong></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><strong><span style='font-size: 10pt; color: #7f0055; font-family: "Courier New";' lang="EN-US">8<span style=""> </span>}</span></strong></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span style='font-size: 10pt; color: #7f0055; font-family: "Courier New";' lang="EN-US">9<span style=""> </span>}</span></strong></p>
</td>
</tr></tbody></table>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 21pt;"><span style="font-size: small;"><span lang="EN-US"><span style=""><span style="font-family: Calibri;"> </span></span></span><span style="">我们可以通过两种途径来测试覆盖率。一种最简洁的方法,选中</span><span lang="EN-US"><span style="font-family: Calibri;">junit</span></span><span style="">的测试类,右键点击,选择</span><span lang="EN-US"><span style="font-family: Calibri;">Run as-&gt;w/coverlipse,</span></span><span style="">如下图</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 21pt;"><span style="font-size: small;"><span style=""> <img src="http://p.blog.csdn.net/images/p_blog_csdn_net/linkyou/EntryImages/20090228/Snap3633714448765576250.gif" alt="" width="601" height="548"></span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 21pt;"></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 21pt;"></p>
<p><span style="font-size: small;"><span style="">
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 21pt;"><span style="">也可以通过在</span><span lang="EN-US"><span style="font-family: Calibri;">Run dialog</span></span><span style="">上面的设置来设置测试类和被测试类。如下图</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 21pt;"></p>
</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 21pt;"><img src="http://p.blog.csdn.net/images/p_blog_csdn_net/linkyou/EntryImages/20090228/Snap4.gif" alt="" width="792" height="640"></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 21pt;"></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 21pt;"></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 21pt;"><span style="font-size: small;"><span style="">最后我们要查看代码覆盖率了,</span><span lang="EN-US"><span style="font-family: Calibri;">coverlipse</span></span><span style="">通过两个页签来显示结果</span></span></p>
<p class="MsoListParagraph" style=""><span style="" lang="EN-US"><span style=""><span style="font-size: small; font-family: Calibri;">1.</span><span style='font: 7pt "Times New Roman";'> </span></span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">coverlipse marks view:</span></span><span style="">通过这个页签会告诉测试者,被测类中哪些代码行被测试,那些代码行没有被测试。由于例子中的被测类的第</span><span lang="EN-US"><span style="font-family: Calibri;">12</span></span><span style="">行不会被执行,所以报告结果如下图。</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 21pt;"><img src="http://p.blog.csdn.net/images/p_blog_csdn_net/linkyou/EntryImages/20090228/Snap5.gif" alt="" width="795" height="293"></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 21pt;"></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 21pt;"><span style="" lang="EN-US"> 2.coverlipse class view:</span><span style="">通过这个页签可以知道被测类的测试覆盖率。如下图</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 21pt;"><span style=""> <img src="http://p.blog.csdn.net/images/p_blog_csdn_net/linkyou/EntryImages/20090228/Snap6.gif" alt="" width="830" height="293"></span></p>
<p><span style="">
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 21pt;"></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 21pt;"></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 21pt;"><span style="">小记:虽然</span><span lang="EN-US"><span style="font-family: Calibri;">coverlipse</span></span><span style="">不能解决我的问题,但是对于自己知识点也是个补充,反正艺多不压身,还可以总结分享给更多的人,我觉得至少比浪费时间在家看电视来得强。需要说明的是</span><span lang="EN-US"><span style="font-family: Calibri;">coverlipse</span></span><span style="">好像把测试类的代码覆盖都算进去了,好像是个小小的</span><span lang="EN-US"><span style="font-family: Calibri;">bug</span></span><span style="">。</span></p>
</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 21pt;"></p>
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics