博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
软件测试(四)之 PrintPrimes
阅读量:6987 次
发布时间:2019-06-27

本文共 4182 字,大约阅读时间需要 13 分钟。

HOMEWORK 3

题目所给代码如下:

1 /*******************************************************  2      * Finds and prints n prime integers  3      * Jeff Offutt, Spring 2003  4      ******************************************************/  5     public static void printPrimes (int n)  6     {  7         int curPrime; // Value currently considered for primeness  8         int numPrimes; // Number of primes found so far.  9         boolean isPrime; // Is curPrime prime? 10         int [] primes = new int [MAXPRIMES]; // The list of prime numbers. 11         12         // Initialize 2 into the list of primes. 13         primes [0] = 2; 14         numPrimes = 1; 15         curPrime = 2; 16         while (numPrimes < n) 17         { 18             curPrime++; // next number to consider ... 19             isPrime = true; 20             for (int i = 0; i <= numPrimes-1; i++) 21             { // for each previous prime. 22                 if (isDivisible(primes[i], curPrime)) 23                 { // Found a divisor, curPrime is not prime. 24                     isPrime = false; 25                     break; // out of loop through primes. 26                 } 27             } 28             if (isPrime) 29             { // save it! 30                 primes[numPrimes] = curPrime; 31                 numPrimes++; 32             } 33         } // End while 34         35         // Print all the primes out. 36         for (int i = 0; i <= numPrimes-1; i++) 37         { 38             System.out.println ("Prime: " + primes[i]); 39         } 40     } // end printPrimes

 

(a):控制流图如下(使用ProcessOn绘制)

 

 

(b):将MAXPRIMES设为4,这样t2=(n=5)就会出现数组越界的错误,但t1=(n=3)无影响。

 

(c):n=1的时候不满足numPrimes < n,故不经过while循环

 

(d):点覆盖:{1,2,3,4,5,6,7,5,6,8,9,10,11,12,13,14,15,16}

 

 

边覆盖:{(1,2),(2,3),(2,12),(3,4),(4,5),(5,6),(6,7),(6,8),(7,5),(8,9), (5,9),(9,10),(9,11),(10,11),(11,2),(12,13),(13,14),(14,15),(15,13), (13,16)}

 

 

主路径覆盖:{(1,2,3,4,5,6,7),(1,2,3,4,5,6,8,9,10,11),(1,2,3,4,5,6,8,9,11),(1,2,3,4,5,9,10,11),(1,2,3,4,5,9,11),(1,2,12,13,14,15),(1,2,12,16),(3,4,5,6,8,9,10,11,2,12,13,14,15),

 

(3,4,5,6,8,9,11,2,12,13,14,15),(3,4,5,6,8,9,10,11,2,12,13,16),(3,4,5,6,8,9,11,2,12,13,16),(3,4,5,9,10,11,2,12,13,14,15),(3,4,5,9,11,2,12,13,14,15),(3,4,5,9,10,11,2,12,13,16),

 

(3,4,5,9,11,2,12,13,16),(6,7,5,9,10,11,2,12,13,14,15),(6,7,5,9,11,2,12,13,14,15),(6,7,5,9,10,11,2,12,13,16),(6,7,5,9,11,2,12,13,16),(14,15,13,16),(13,14,15,13),(5,6,7,5),

 

(2,3,4,5,6,8,9,10,11,2),(2,3,4,5,6,8,9,11,2),(2,3,4,5,9,10,11,2),(2,3,4,5,9,11,2)}

 

设计主路径覆盖的测试用例

以测试上面的程序printPrimes为例,下面的测试程序用了一些课外自己学的东西~

代码如下:

1 import static org.junit.Assert.*; 2  3 import java.io.ByteArrayOutputStream; 4 import java.io.PrintStream; 5 import java.lang.reflect.Method; 6  7 import org.junit.After; 8 import org.junit.AfterClass; 9 import org.junit.Before;10 import org.junit.BeforeClass;11 12 13 public class Test {14     private PrintPrimes p;15 16     PrintStream console = null;          // 输出流 (字符设备) 17     ByteArrayOutputStream bytes = null;  // 用于缓存console 重定向过来的字符流18 19     @org.junit.Before20     public void setUp() throws Exception {21         p = new PrintPrimes();           //初始化22         bytes = new ByteArrayOutputStream();    // 分配空间23         console = System.out;                   // 获取System.out 输出流的句柄24         System.setOut(new PrintStream(bytes));  // 将原本输出到控制台Console的字符流 重定向 到 bytes25     }26     27     @org.junit.After28     public void tearDown() throws Exception {29         System.setOut(console);30     }31     32     @org.junit.Test33     public void testResult() throws Exception {34         String s = new String("Prime:2" + '\r'+'\n');    // 控制台的换行,这里用 '\r' + '\n' 与println等价35         s += "Prime:3" + '\r'+'\n';36         s += "Prime:5" + '\r'+'\n';37         38         Class pp = p.getClass();39         //获取方法40         Method method = pp.getDeclaredMethod("printPrimes", 41                 new Class[]{
int.class});42 //将私有设置可访问43 method.setAccessible(true);44 //传值,返回结果对象45 method.invoke(p, 3);46      //对比结果47 assertEquals(s, bytes.toString()); // bytes.toString() 作用是将 bytes内容 转换为字符流48 49 }50 }

测试结果如下:已完成主路径覆盖

 

转载于:https://www.cnblogs.com/tjulym/p/5334213.html

你可能感兴趣的文章
第十四周翻译-《Pro SQL Server Internals, 2nd edition》
查看>>
jdbcUrl is required with driverClassName spring boot 2.0版本
查看>>
C# 关于JArray和JObject封装JSON对象
查看>>
【Visual C++】游戏开发笔记之十 基础动画显示(三) 透明动画的实现
查看>>
今目标反思
查看>>
SQL Server 备份的 8 种方法。
查看>>
SQL Server 从数据库快照还原数据库
查看>>
$(document).keydown
查看>>
对Java、C#转学swift的提醒:学习swift首先要突破心理障碍。
查看>>
面向对象 2017-4-15
查看>>
java项目导出war包
查看>>
算法第三章实践报告
查看>>
linux应用之Mongodb的安装及配置(centos)
查看>>
Python 面向对象 --- eval 函数
查看>>
PHP的错误和异常处理
查看>>
z-index兼容问题:关于ie6/7下的z-index
查看>>
试题总结(一)
查看>>
HDU 4288
查看>>
oracle:wm_concat函数与oracle版本
查看>>
Servlet学习总结
查看>>