51Testing丛书连载:(八) 互联网单元测试及实践

发表于:2008-8-14 17:44

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:陈卫俊 赵璨 周磊等    来源:51Testing软件测试网

  TestCase06
  前置条件:新建webapps的索引文件,IndexSearcher指向该索引文件。
  描述:测试webapps目录下的索引。
  输入参数:query="dynamice-unit-test",maxresults=100,startat=0。
  期待结果:搜索出新增的索引。
  代码6.14  TestCase06

1 @Test
2 public void testStartWithWebApps() throws Exception {
3  MockJSPSearchResult jsp = new MockJSPSearchResult();
4  jsp.searchResult("dynamice-unit-test", "100", "0");
5  Hits hits = jsp.getHits();
6  assertEquals(1, hits.length());
7  assertEquals("/lucene-unit-test.txt", hits.doc(0).get("path"). substring(10));
8  assertEquals("", hits.doc(0).get("summary"));
9 } 

  这个测试用例是为了解决第125行:if (url != null && url.startsWith("../webapps/"))的代码覆盖问题。默认Lucene的Demo文件中没有符合此条件的索引,因此需要新建索引。这里在上级目录中新建了webapps目录,目录中新建一个文本文件lucene-unit-test.txt,文件中包含一行内容dynamice-unit-test。使用增量构建索引的命令将新文件加入现有的索引文件中:rg.apache.lucene.demo.IndexHTML -index d:\opt\lucene\index ../
  TestCase07
  前置条件:索引文件存在,IndexSearcher指向该索引文件。
  描述:测试分页。
  输入参数:query=hello,maxresults=1,startat=0。
  期待结果:有2条搜索结果。
  代码6.15  TestCase07

01  @Test

02  public void testMoreResults() throws Exception {

03      String[] documentArray = {

04              "Apache Lucene - Building and Installing the Basic Demo",

05              "Apache Lucene - Query Parser Syntax" };

06      String[] summaryArray = {

07              "Apache > Lucene [Lucene] [Lucene]   Main Wiki Lucene 2.3.1                  Documentation   Documentation Overview Javadocs All Core Demo                   Contrib Analyzers Ant Bdb Bdb-je Benchmark Highlighter Lucli                   Memory Miscellane",

08              "Apache > Lucene [Lucene] [Lucene]   Main Wiki Lucene 2.3.1                  Documentation   Documentation Overview Javadocs All Core Demo                   Contrib Analyzers Ant Bdb Bdb-je Benchmark Highlighter Lucli                   Memory Miscellane" };

09

10      MockJSPSearchResult jsp = new MockJSPSearchResult();

11      jsp.searchResult("hello", "1", "0");

12     

13      Hits hits = jsp.getHits();

14      assertEquals(2, hits.length());

15      for (int i = 0; i < 2; i++) {

16          assertEquals(documentArray[i], hits.doc(i).get("title"));

17          assertEquals(summaryArray[i], hits.doc(i).get("summary"));

18      }      

19  }

  TestCase08
  前置条件:索引文件存在,IndexSearcher指向该索引文件。
  描述:测试搜索不出任何结果。
  输入参数:query= test_without_results,maxresults=100,startat=0。
  期待结果:无任何搜索结果。
  代码6.16  TestCase08

1 @Test
2 public void testNoResults() throws Exception {
3  MockJSPSearchResult jsp = new MockJSPSearchResult();
4  jsp.searchResult("test_without_results", "100", "0"); 
5  assertEquals(0, jsp.getHits().length());
6 }

  在设计出这几个用例后,MockJSPSearchResults代码覆盖率的完成情况达到了行覆盖100%,分支覆盖83%。下面分析一下为什么分支覆盖没有达到100%,是否还需要补充测试用例?从覆盖报告中,可以整理出分支覆盖不全的代码:
  1.第93行、第105行:if (error == false && searcher != null)
  2.第126行:if (url != null && url.startsWith("../webapps/"))
  3.第129行:if ((doctitle == null) || doctitle.equals(""))
  4.第156行:if (searcher != null)
  报告显示该分支覆盖率为3/4=75%。从MockJSPSearchResults代码中很容易看出,其实不可能出现error为false而search==null的情况,因此search==null意味着出现了异常,而在异常代码中error会被设置为true。因此这个分支是冗余分支。同样的道理,上述4种情况未覆盖的分支均属于冗余分支。由此代码的行覆盖和分支覆盖均达到了100%。
  但是无论是行覆盖还是分支覆盖都属于较弱的覆盖,还需要根据设计和流程图进行用例的补充。因为这里的重点在于介绍代码覆盖驱动的用例设计完善思路,对于基于流程图的用例设计方案就不再赘述。

 

连载一  连载二  连载三  连载四  连载五  连载六  连载七

本文选自:《51Testing软件测试作品系列》之三的 互联网单元测试及实践 ,本站经电子工业出版社和作者的授权,近期将进行部分章节的连载,敬请期待!

版权声明:51Testing软件测试网及相关内容提供者拥有51testing.com内容的全部版权,未经明确的书面许可,任何人或单位不得对本网站内容复制、转载或进行镜像。51testing软件测试网欢迎与业内同行进行有益的合作和交流,如果有任何有关内容方面的合作事宜,请联系我们


55/5<12345
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号