作业5 四则运算 测试与封装 5.2
开发环境: Eclipse
开发人员: 欧其锋(201306114305)
余汉城(201306114317)(http://www.cnblogs.com/yuhancheng/)
分工: 欧其锋:异常处理
余汉城:重构
源代码:
1 package GongNengpk; 2 3 import GongNengpkTest.ChuShuLingException; 4 import GongNengpkTest.JCException; 5 6 7 8 9 @SuppressWarnings("serial") 10 public class HeXinCode { 11 12 public int Jia(int a,int b) 13 { 14 String str=""; 15 if(a>0 && b<0) 16 { 17 str=a+"+"+"("+b+")="+(a+b); 18 19 } 20 else if(a<0 && b>0) 21 { 22 str="("+a+")"+"+"+b+"="+(a+b); 23 } 24 else 25 { 26 str=a+"+"+b+"="+(a+b); 27 } 28 System.out.println(str); 29 return a+b; 30 } 31 public int Jia(int a,int b,int c) 32 { 33 String str=""; 34 if(a<0 && b>0 && c>0 ) 35 { 36 str="("+a+")"+"+"+b+c+"="+(a+b+c); 37 } 38 else if(a<0 && b<0 && c>0) 39 { 40 str="("+a+")"+"("+b+")"+c+"="+(a+b+c); 41 } 42 else if(a<0 && b<0 && c<0) 43 { 44 str="("+a+")"+"("+b+")"+"("+c+")"+"="+(a+b+c); 45 } 46 else if(a<0 && b<0 && c>0) 47 { 48 str="("+a+")"+"("+b+")"+c+"="+(a+b+c); 49 } 50 else 51 { 52 str=a+"+"+b+"+"+c+"="+(a+b+c); 53 } 54 System.out.println(str); 55 return a+b; 56 } 57 public int Jian(int a,int b) 58 { 59 String str=""; 60 if(a>0 && b<0) 61 { 62 str=a+"-"+"("+b+")="+(a-b); 63 64 } 65 else if(a<0 && b>0) 66 { 67 str="("+a+")"+"-"+b+"="+(a-b); 68 } 69 else 70 { 71 str=a+"-"+b+"="+(a-b); 72 } 73 System.out.println(str); 74 return a-b; 75 } 76 public int Cheng(int a,int b) 77 { 78 String str=""; 79 if(a>0 && b<0) 80 { 81 str=a+"*"+"("+b+")="+(a*b); 82 83 } 84 else if(a<0 && b>0) 85 { 86 str="("+a+")"+"*"+b+"="+(a*b); 87 } 88 else 89 { 90 str=a+"*"+b+"="+(a*b); 91 } 92 System.out.println(str); 93 return a*b; 94 } 95 public int Chu(int a,int b) throws ChuShuLingException 96 { 97 int end=-1; 98 String str=""; 99 if(b==0) 100 { 101 throw new ChuShuLingException(); 102 } 103 else 104 { 105 if(a>0 && b<0) 106 { 107 str=a+"/"+"("+b+")="+(a/b); 108 109 } 110 else if(a<0 && b>0) 111 { 112 str="("+a+")"+"/"+b+"="+(a/b); 113 } 114 else 115 { 116 str=a+"/"+b+"="+(a/b); 117 } 118 System.out.println(str); 119 end=a/b; 120 } 121 return end; 122 } 123 public int JC(int c) throws JCException 124 { 125 int end=-1; 126 int jc=1; 127 if(c<0) 128 { 129 throw new JCException(); 130 } 131 else 132 { 133 134 for(int i=c;i>0;i--) 135 { 136 jc=jc*i; 137 end=jc; 138 } 139 String str=c+"!="+end; 140 System.out.println(str); 141 } 142 return end; 143 } 144 145 }
1 package GongNengpkTest;
2
3 public class JCException extends Exception {
4
5 public JCException()
6 {
7 System.out.println("阶乘数不能小于0!");
8 }
9 }
1 package GongNengpkTest; 2 3 public class ChuShuLingException extends Exception { 4 public ChuShuLingException() 5 { 6 System.out.println("除数不能为0!"); 7 } 8 9 }
1 package GongNengpkTest; 2 3 import static org.junit.Assert.*; 4 5 import org.junit.Test; 6 7 import GongNengpk.HeXinCode; 8 9 10 11 12 13 14 public class HeXinCodeTest { 15 16 HeXinCode hx=new HeXinCode(); 17 @Test 18 public void testJia() 19 { 20 int num4=hx.Jia(-3, 2,3); 21 assertEquals(2,num4); 22 23 } 24 @Test 25 public void testJian() 26 { 27 int num5=hx.Jian(-1, 5); 28 assertEquals(-6,num5); 29 } 30 @Test 31 public void testCheng() 32 { 33 int num6=hx.Cheng(-1, 5); 34 assertEquals(-5,num6); 35 } 36 @Test 37 public void testChu() throws ChuShuLingException 38 { 39 HeXinCode hx=new HeXinCode(); 40 int num_6; 41 try 42 { 43 num_6=hx.Chu(5, 0); 44 assertEquals(5,num_6); 45 } 46 catch(Exception e) 47 { 48 49 } 50 51 } 52 @Test 53 public void testJC() throws JCException 54 { 55 HeXinCode hx=new HeXinCode(); 56 int num_7; 57 try{ 58 num_7= hx.JC(-5); 59 assertEquals(1,num_7); 60 } 61 catch(Exception e) 62 { 63 64 } 65 } 66 67 68 69 }
首先是对加减乘做了简单的单元测试,这三个运算在单元测试中是没出现什么问题的。
截图:
而到了除法和阶乘运算,除法是要考虑除数不能为零的,而阶乘的底数是不能小于零的。一开始,没有定义异常是不能通过单元测试的,如下图
到这里。心想只能用异常处理了,但是,我把自定义异常处理的知识忘掉了,平时用的都是系统的异常,这就是这次作业的好处之一:我可以捡起我遗忘掉的知识。通过翻阅书本,自定义了两个异常处理的类。代码在上面;然后问题也就解决了。如图
方法重载:由于时间原因,我们只对加法做了方法的重载。如图:
心得和总结:这次作业的收获是对测试与封装更进一步的熟悉,而且温习了之前记得不是太清楚的编程知识,比如异常的处理以及自定义的异常,而而且现在觉得做单元测试是我们个项目的必经之路,做了单元测试基本上可以发现我们程序中bug。而这次作业是接着上次作业的第二个阶段做的,相信通过一个一个的阶段的走下去,自己会越来越熟悉,越来越接近程序猿的本领。