1 package test;
2
3 public class MyStack
4 {
5 private String[] elements;
6
7 private int nextIndex;
8
9 public MyStack()
10 {
11 elements = new String[100];
12 nextIndex = 0;
13 }
14
15 public void push(String element) throws Exception
16 {
17 if(100 == nextIndex)
18 {
19 throw new Exception("数组越界异常!");
20 }
21
22 elements[nextIndex++] = element;
23 }
24
25 public String pop() throws Exception
26 {
27 if(0 == nextIndex)
28 {
29 throw new Exception("数组越界异常!");
30 }
31
32 return elements[--nextIndex];
33 }
34
35 public void delete(int n) throws Exception
36 {
37 if(nextIndex - n < 0)
38 {
39 throw new Exception("数组越界异常!");
40 }
41
42 nextIndex -= n;
43 }
44
45 public String top() throws Exception
46 {
47 if(0 == nextIndex)
48 {
49 throw new Exception("数组越界异常!");
50 }
51
52 return elements[nextIndex - 1];
53 }
54
55 }
56
57 package junit;
58
59 import junit.framework.Assert;
60 import junit.framework.TestCase;
61
62 @SuppressWarnings("deprecation")
63 public class MyStackTest extends TestCase
64 {
65 private MyStack myStack;
66
67 @Override
68 public void setUp() throws Exception
69 {
70 myStack = new MyStack();
71 }
72
73 //测试正常情况的一般情况,向栈内放入一个元素,然后取出。
74 public void testPush()
75 {
76 try
77 {
78 myStack.push("hello world");
79 }
80 catch (Exception e)
81 {
82 Assert.fail();
83 }
84
85 String result = null;
86
87 try
88 {
89 result = myStack.pop();
90 }
91 catch (Exception ex)
92 {
93
94 }
95
96 Assert.assertEquals("hello world", result);
97 }
98
99 //测试正常情况的临界情况,即放入100个元素栈是否会出错
100 public void testPush2()
101 {
102 for (int i = 0; i < 100; i++)
103 {
104 try
105 {
106 myStack.push(i + "");
107 }
108 catch (Exception ex)
109 {
110 Assert.fail();
111 }
112 }
113
114 for (int i = 0; i < 100; i++)
115 {
116 String result = null;
117
118 try
119 {
120 result = myStack.pop();
121 }
122 catch (Exception ex)
123 {
124
125 }
126
127 Assert.assertEquals((99 - i) + "", result);
128 }
129 }
130
131 //测试异常情况,101个元素输入
132 public void testPush3()
133 {
134 Exception tx = null;
135
136 try
137 {
138 for (int i = 0; i <= 100; i++)
139 {
140 myStack.push(i + "");
141 }
142
143 Assert.fail();
144 }
145 catch (Exception ex)
146 {
147 tx = ex;
148 }
149
150 assertData(tx);
151 }
152
153 public void testPop()
154 {
155 try
156 {
157 myStack.push("hello world");
158 }
159 catch (Exception e)
160 {
161
162 }
163
164 String result = null;
165
166 try
167 {
168 result = myStack.pop();
169 }
170 catch (Exception ex)
171 {
172 Assert.fail();
173 }
174
175 Assert.assertEquals("hello world", result);
176 }
177
178 public void testPop2()
179 {
180 Throwable tx = null;
181
182 try
183 {
184 myStack.pop();
185
186 Assert.fail();
187 }
188 catch (Exception ex)
189 {
190 tx = ex;
191 }
192
193 assertData(tx);
194 }
195
196 public void testPop3()
197 {
198 Throwable tx = null;
199
200 try
201 {
202 myStack.push("hello");
203 }
204 catch (Exception ex)
205 {
206
207 }
208
209 try
210 {
211 myStack.pop();
212 myStack.pop();
213
214 Assert.fail();
215 }
216 catch (Exception ex)
217 {
218 tx = ex;
219 }
220
221 assertData(tx);
222 }
223
224 public void testTop()
225 {
226 try
227 {
228 myStack.push("hello");
229 }
230 catch (Exception ex)
231 {
232
233 }
234
235 String result = null;
236
237 try
238 {
239 result = myStack.top();
240 }
241 catch (Exception ex)
242 {
243 Assert.fail();
244 }
245
246 Assert.assertEquals("hello", result);
247 }
248
249 public void testTop2()
250 {
251 Throwable tx = null;
252
253 try
254 {
255 myStack.top();
256
257 Assert.fail();
258 }
259 catch (Exception ex)
260 {
261 tx = ex;
262 }
263
264 assertData(tx);
265 }
266
267 public void testDelete()
268 {
269 try
270 {
271 for (int i = 0; i < 10; i++)
272 {
273 myStack.push(i + "");
274 }
275
276 myStack.delete(10);
277 }
278 catch (Exception ex)
279 {
280 Assert.fail();
281 }
282 }
283
284 public void testDelete2()
285 {
286 Throwable tx = null;
287
288 try
289 {
290 for (int i = 0; i < 10; i++)
291 {
292 myStack.push(i + "");
293 }
294
295 myStack.delete(11);
296
297 Assert.fail();
298 }
299 catch (Exception ex)
300 {
301 tx = ex;
302 }
303
304 assertData(tx);
305 }
306
307 private void assertData(Throwable tx)
308 {
309 Assert.assertNotNull(tx);
310 Assert.assertEquals(Exception.class, tx.getClass());
311 Assert.assertEquals("数组越界异常!", tx.getMessage());
312 }
313
314 }