『車窓からの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());
    }

}