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 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软件测试网欢迎与业内同行进行有益的合作和交流,如果有任何有关内容方面的合作事宜,请联系我们。