『車窓からのTDD』を写経してみた #6 トンネルを抜けると...
(写経)6.トンネルを抜けると、そこは?! 〜TDD ラストスパート〜
(P.10)
(P.11)
『pop したら一番上の要素を取り除く』点についてテストしてみる。前の節で数値を修正した部分を、確認したいケースの内容に戻してみる。テストが失敗する事を確認。
popした際にsizeの値を減らす処理を記述、テストが通る事を確認。
先入れ後出しのコンテナ実装に関するテストの確認。この時点では失敗。
仕様を満たすコードを実装し、テスト実施。オールグリーンを確認。
(P.12)
以上、写経終了!!!
ここまでの記録(Bitbucket)
Stack.java
package tddbytrain; import java.util.EmptyStackException; public class Stack { private int value; private int[] value = new int[10]; private int size; /** * 要素が空か否かを判定 * @return 空の場合、true */ public boolean isEmpty() { return size == 0; } /** * 引数の値をスタックの一番上に積む。 * @param value 積む値 */ public void push(int value) { this.value = value; size++; this.value[size++] = value; } /** * スタックの一番上の値を取得する。 * @return 一番上の値 */ public int top() { emptyCheck(); return value; return value[size - 1]; } /** * 空判定処理 */ private void emptyCheck() { if (isEmpty()) { throw new EmptyStackException(); } } /** * スタックのサイズを取得する。 * @return スタックのサイズ */ public int size() { return size; } /** * スタックの一番上の値を取り除く。 */ public void pop() { emptyCheck(); size--; } }
StackTest.java
package tddbytrain; import static org.junit.Assert.*; import java.util.EmptyStackException; import org.junit.Before; import org.junit.Test; public class StackTest extends Stack { Stack stack; @Before public void setUp() { stack = new Stack(); } @Test public void testCreate() { assertTrue(stack.isEmpty()); } @Test public void testPushAndTop() { stack.push(1); assertFalse(stack.isEmpty()); assertEquals(1, stack.top()); } @Test public void testPushAndSize() { stack.push(1); assertEquals(1, stack.size()); stack.push(2); assertEquals(2, stack.size()); } @Test(expected = EmptyStackException.class) public void testEmptyPop() { stack.pop(); fail(); } @Test public void testPushAndPop() { stack.push(1); stack.pop(); assertEquals(1, stack.size()); assertEquals(0, stack.size()); } @Test(expected = EmptyStackException.class) public void testEmptyTop() { stack.top(); fail(); } @Test public void testPushPushPopTop() { stack.push(1); stack.push(2); assertEquals(2, stack.size()); stack.pop(); assertEquals(1, stack.top()); } }