测试与封装5.1.5.2
1.第一阶段目标 - 把计算的功能封装成类。
2.设计测试用例:用白盒与黑盒测试设计技术,为计算核心设计测试用例。
3.在实验环境中(如MyEclipse集成开发环境+Junit测试框架)运行测试用例,分析测试结果,找出程序问题,给出改进前后的代码对照。
结对子:
201306114454 陈汝婷 http://home.cnblogs.com/u/chenruting/
201306114448 练丽云 http://i.cnblogs.com/EditPosts.aspx?opt=1
1 //Test.java 2 import java.awt.event.ActionEvent; 3 import java.awt.event.ActionListener; 4 5 import javax.swing.JFrame; 6 7 import java.awt.GridLayout; 8 import java.awt.GridBagLayout; 9 10 import javax.swing.JToolBar; 11 import javax.swing.JLabel; 12 13 import java.awt.Color; 14 15 import javax.swing.JButton; 16 17 import java.awt.Font; 18 19 20 public class Test extends JFrame implements ActionListener{ 21 public JButton bt1; 22 JLabel lb1; 23 24 public Test() { 25 getContentPane().setBackground(Color.PINK); 26 setTitle("\u56DB\u5219\u8FD0\u7B97"); 27 getContentPane().setLayout(null); 28 setSize(200,200); 29 30 lb1 = new JLabel("\u6B22\u8FCE\u8FDB\u5165\u56DB\u5219\u8FD0\u7B97\u7CFB\u7EDF"); 31 lb1.setForeground(Color.BLUE); 32 lb1.setBounds(10, 10, 159, 15); 33 getContentPane().add(lb1); 34 35 bt1 = new JButton("\u5F00\u59CB"); 36 bt1.setBounds(41, 63, 98, 49); 37 getContentPane().add(bt1); 38 bt1.addActionListener(this); 39 // bt1.addActionListener(new ActionListener() { 40 // public void actionPerformed(ActionEvent arg0) { 41 // //Test1.main(null); 42 // 43 // } 44 // }); 45 46 47 setVisible(true); //将窗口设置为可视 48 setResizable(false); 49 setAlwaysOnTop(true);//设置此窗口永远为最上方 是window的方法 50 setLocationRelativeTo(null); //让窗口在屏幕的正中间显示 51 52 } 53 54 55 public void actionPerformed(ActionEvent arg0) { 56 if(arg0.getSource()==bt1){ 57 setVisible(false); 58 new Test1(); 59 60 } 61 } 62 63 64 public static void main(String[] args) { 65 Test test=new Test(); 66 } 67 } 68 //Test1.java 69 import java.awt.event.ActionEvent; 70 import java.awt.event.ActionListener; 71 72 import javax.swing.JFrame; 73 import javax.swing.JButton; 74 import javax.swing.JLabel; 75 import javax.swing.JTextField; 76 77 78 79 80 public class Test1 extends JFrame implements ActionListener{ 81 private JTextField T1; 82 private JTextField T2; 83 private JTextField T3; 84 private JTextField T4; 85 private JLabel l0 ; 86 private JLabel l1; 87 private JLabel l2; 88 private JLabel label_3; 89 private JButton button,btnNewButton; 90 91 92 public long x; 93 public long y ; 94 95 96 public String s; 97 98 99 public Test1() { 100 setTitle("SI \u5219\u8FD0\u7B97"); 101 getContentPane().setLayout(null); 102 setSize(400,400); 103 btnNewButton = new JButton("\u7EE7\u7EED"); 104 btnNewButton.addActionListener(this); 105 btnNewButton.setBounds(130, 239, 93, 23); 106 getContentPane().add(btnNewButton); 107 108 l0 = new JLabel("\u8BF7\u8F93\u5165\u7B2C\u4E00\u4E2A\u6570\uFF1A"); 109 l0.setBounds(38, 64, 131, 15); 110 getContentPane().add(l0); 111 112 l1 = new JLabel("\u8BF7\u8F93\u5165\u7B2C\u4E8C\u4E2A\u6570\uFF1A"); 113 l1.setBounds(38, 89, 131, 15); 114 getContentPane().add(l1); 115 116 l2 = new JLabel("\u8BF7\u8F93\u5165\u8FD0\u7B97\u7B26\uFF1A"); 117 l2.setBounds(38, 114, 131, 15); 118 getContentPane().add(l2); 119 120 T1 = new JTextField(); 121 T1.setBounds(206, 61, 66, 21); 122 getContentPane().add(T1); 123 T1.setColumns(10); 124 T1.addActionListener(this); 125 T2 = new JTextField(); 126 T2.setColumns(10); 127 T2.setBounds(206, 86, 66, 21); 128 getContentPane().add(T2); 129 T2.addActionListener(this); 130 T3 = new JTextField(); 131 T3.setColumns(10); 132 T3.setBounds(206, 111, 66, 21); 133 getContentPane().add(T3); 134 T3.addActionListener(this); 135 136 button = new JButton("\u7ED3\u675F"); 137 button.addActionListener(this); 138 button.setBounds(264, 239, 93, 23); 139 getContentPane().add(button); 140 141 label_3 = new JLabel("\u8FD0\u7B97\u7ED3\u679C\uFF1A"); 142 label_3.setBounds(38, 139, 131, 15); 143 getContentPane().add(label_3); 144 145 T4 = new JTextField(); 146 T4.setColumns(10); 147 T4.setBounds(206, 142, 66, 21); 148 getContentPane().add(T4); 149 T4.addActionListener(this); 150 this.setVisible(true); 151 } 152 153 public static void main(String[] args) { 154 new Test1(); 155 156 Test.setDefaultLookAndFeelDecorated(false); 157 158 } 159 160 161 public void actionPerformed(ActionEvent evt) { 162 163 164 if(evt.getSource()==T1){ 165 T2.requestFocusInWindow(); 166 } 167 else if(evt.getSource()==T2){ 168 T3.requestFocusInWindow(); 169 } 170 else if(evt.getSource()==T3){ 171 T3.requestFocusInWindow(); 172 Core core=new Core(); 173 long sign=core.calc(T3.getText(), Long.parseLong(T1.getText()),Long.parseLong(T2.getText())); 174 T4.setText(String.valueOf(sign)); 175 176 } 177 else if(evt.getSource()==btnNewButton) 178 { 179 setVisible(false); 180 new Test1(); 181 182 } 183 else if(evt.getSource()==button) 184 { 185 System.exit(0); 186 } 187 188 189 } 190 } 191 //Core.java 192 import java.text.DecimalFormat; 193 import java.util.Scanner; 194 195 public class Core { 196 197 static final int NUM_MAX_OPERATOR = 1; // 最多4 个运算符 198 static final int NUM_SCALE = 2; // 数值范围是 -1000 到 1000 199 static final int NUM_PRECISION = 3; // 精度是小数点后两位 200 public static int i=0; 201 public long z; 202 public double calc(String s) { 203 double result = 0.0d; 204 // 这个方法中我可以计算两个数的+ - * / 205 return result; 206 } 207 public long add(long x,long y) { 208 209 return x+y; 210 } 211 public long calc(String s, long x, long y) { 212 213 Scanner scanner = new Scanner(System.in); 214 if (s.equals("+")) { 215 z=(x+y); 216 System.out.println(z); 217 } else if (s.equals("-")) { 218 z=x-y; 219 System.out.println(z); 220 } else if (s.equals("*")) { 221 z=x*y; 222 System.out.println(z); 223 } else if (s.equals("/")) { 224 if (y != 0) { 225 z=x/y; 226 System.out.println(z); 227 } else { 228 i++; 229 try{ z=x/y;} 230 catch(Exception e){ 231 if(i<3) 232 { 233 System.out.println(e+"分母不能为零!"); 234 System.out.print("请重新输入第二个数:"); 235 236 y = scanner.nextLong(); 237 calc(s,x,y); 238 239 } 240 else{ 241 System.out.println(i); 242 System.out.println(exit(i=3)); 243 } 244 } 245 } 246 } 247 248 249 250 251 else { 252 System.out.println("输入异常,不符合要求!"); 253 }return z; 254 } 255 256 public String geta(){ 257 return String.valueOf(z); 258 } 259 private char[] exit(int j) { 260 // TODO 自动生成的方法存根 261 return null; 262 } 263 264 } 265 //CoreTest.java 266 import static org.junit.Assert.*; 267 268 import org.junit.Test; 269 270 271 public class CoreTest { 272 273 @SuppressWarnings("deprecation") 274 @Test 275 276 public void test() { 277 Core core = new Core(); 278 long d = core.calc("+",12589456L,25364563L); 279 assertEquals(37954019, d); 280 } 281 @Test 282 public void jianfatest() { 283 Core core = new Core(); 284 long d = core.calc("-",2,1); 285 assertEquals(1, d); 286 } 287 @Test 288 public void chengfatest() { 289 Core core = new Core(); 290 long d = core.calc("*",2,1); 291 assertEquals(2, d); 292 } 293 @Test 294 public void cftest() { 295 Core core = new Core(); 296 long d = core.calc("/",6,2); 297 assertEquals(2, d); 298 } 299 }
1.测试步骤及运行结果:
1)弹出开始框:
2)点击开始后,弹出相应的计算功能框,输入相应数据,回车输出结果:
(1)加法:
(2)减法
(3)乘法:
(4)除法
3)若想再继续进行计算,则按继续键,则可重新输入数据进行计算:
4)若想结束运算,则按结束键即可退出窗口,结束程序!
2.单元测试:
1)加法单元测试:
2)减法单元测试:
3)乘法单元测试:
4)除法单元测试:
心得体会:
一开始换队友又再结对子,我们是拒绝的。因为两个人既要分工合作,又来紧密相连,不然做出来的代码整合不到一起是没有用的。
但是经过几天的合作,我觉得比上次结对子收获更大,或许是合作的积极性提高了吧。我曾试过早上6点,就把我的队友CALL醒,一起出来完善我们未完成好的程序。一开始我们都是不能接受的!但是,我们还是一起乖乖出来谈论,一起去测试错误,一起去解决问题。相比之前,我觉得我学习的积极性高的,相应的心态也没有这么浮躁了。以前我遇到解决不了的问题,都是很烦躁的。现在就一心想静下来,好好找出解决问题的办法。我相信这就是团队合作带给我的力量和改变了我过往许多不足。虽然我们做的程序不是最好的,但是我们是最用心的。我在这里也希望大家能得到提高。谢谢!
最后让大家欣赏下我们团队照片:花奶队