3月31日

前回の復習と続き

前回は以下のテストを作成したところまで。

次のテストを追加する。

	@Test
	public void testSay5() {
		FizzBuzz fb = new FizzBuzz();
		String s = fb.say(5);
		assertEquals("Buzz", s);
	}

テストを実行するとエラーになることを確認する。

テストにパスするように say() メソッドを実装する。

public String say(int i) {
    if (i == 3) return "Fizz";
    if (i == 5) return "Buzz";
    return String.valueOf(i);
}

テストを実行してパスすることを確認する。

次のテストを追加する。

	@Test
	public void testSay6() {
		FizzBuzz fb = new FizzBuzz();
		String s = fb.say(6);
		assertEquals("Fizz", s);
	}

テストを実行するとエラーになることを確認する。

テストにパスするように say() メソッドを実装する。

public String say(int i) {
    if (i % 3 == 0) return "Fizz";
    if (i == 5) return "Buzz";
    return String.valueOf(i);
}

テストを実行してパスすることを確認する。

次のテストを追加する。
7、8は数字を返し、9は Fizz を返すので、次は 10 の場合のテストを作る。

	@Test
	public void testSay10() {
		FizzBuzz fb = new FizzBuzz();
		String s = fb.say(10);
		assertEquals("Buzz", s);
	}

テストを実行するとエラーになることを確認する。

テストにパスするように say() メソッドを実装する。

public String say(int i) {
    if (i % 3 == 0) return "Fizz";
    if (i % 5 == 0) return "Buzz";
    return String.valueOf(i);
}

テストを実行してパスすることを確認する。

次のテストを追加する。
11、13,14は数字を返し、12は Fizz を返すので、次は 15 の場合のテストを作る。

	@Test
	public void testSay15() {
		FizzBuzz fb = new FizzBuzz();
		String s = fb.say(15);
		assertEquals("FizzBuzz", s);
	}

テストを実行するとエラーになることを確認する。

テストにパスするように say() メソッドを実装する。

public String say(int i) {
    if (i % 3 == 0) return "Fizz";
    if (i % 5 == 0) return "Buzz";
    if (i % 15 == 0) return "FizzBuzz";
    return String.valueOf(i);
}

テストを実行すると、この実装ではエラーになる!
エラー情報を見ると、「FizzBuzz」ではなく「Fizz」が返されていることがわかる。
15の倍数は3でも割り切れるので、「Fizz」を返してしまう。

引数の値を評価するif文の順番を変更する。

public String say(int i) {
    if (i % 15 == 0) return "FizzBuzz";
    if (i % 3 == 0) return "Fizz";
    if (i % 5 == 0) return "Buzz";
    return String.valueOf(i);
}

テストを実行してパスすることを確認する。

3月24日

自己紹介

「さわださとし」で検索してください。

Webサイト

WordPressで作成しています。
授業内容を、随時記録していきます。

FizzBuzz

テスト駆動開発の練習としてFizzBuzzを作る。

新規Javaプロジェクト「tdd」を作成する。
新規Javaクラス「FizzBuzz」を作成する。
メソッド say() を追加する。

package tdd;

public class FizzBuzz {
	public String say(int i) {
		return null;
	}
}

FizzBuzzクラスを右クリックし「新規」-「JUnitテストケース」を選択する。
「次へ」をクリックし、say()メソッドにチェックを入れて「完了」をクリックすると、FizzBuzzTestクラスが生成される。

テストの作成

testSay()メソッドの実装を変更する。

package tdd;

import static org.junit.Assert.*;

import org.junit.Test;

public class FizzBuzzTest {

	@Test
	public void testSay() {
		FizzBuzz fb = new FizzBuzz();
		String s = fb.say(1);
		assertEquals("1", s);
	}
}

このテストにパスするように、FizzBuzzクラスのsay()メソッドを実装する。

	public String say(int i) {
		return "1";
	}

テストにパスしたら、次のテストを追加する。

	@Test
	public void testSay2() {
		FizzBuzz fb = new FizzBuzz();
		String s = fb.say(2);
		assertEquals("2", s);
	}

テストを実行するとエラーになることを確認する。

テストにパスするように say() メソッドを実装する。

	public String say(int i) {
		if (i == 2) return "2";
		return "1";
	}

テストを実行してパスすることを確認する。

次のテストを追加する。

	@Test
	public void testSay3() {
		FizzBuzz fb = new FizzBuzz();
		String s = fb.say(3);
		assertEquals("Fizz", s);
	}

テストを実行するとエラーになることを確認する。

テストにパスするように say() メソッドを実装する。

	public String say(int i) {
		if (i == 3) return "Fizz";
		if (i == 2) return "2";
		return "1";
	}

テストを実行してパスすることを確認する。

次のテストを追加する。

	@Test
	public void testSay4() {
		FizzBuzz fb = new FizzBuzz();
		String s = fb.say(4);
		assertEquals("4", s);
	}

テストを実行するとエラーになることを確認する。

テストにパスするように say() メソッドを実装する。
if 文ばかり並ぶのはきれいじゃないので、コードを簡略化する。

	public String say(int i) {
		if (i == 3) return "Fizz";
		return String.valueOf(i);
	}

テストを実行してパスすることを確認する。

次のテストを追加する。

	@Test
	public void testSay5() {
		FizzBuzz fb = new FizzBuzz();
		String s = fb.say(5);
		assertEquals("Buzz", s);
	}

テストを実行するとエラーになることを確認する。

テスト駆動開発では、エラーの状態で終わらせておく。
次に作業開始するときは、最初にテストを実行する。
エラーになるので、どこから作業開始すればいいのかがすぐにわかる。