5月14日

テストを実行するとMusicPlayerTestの「プレイリストに音楽を追加する()」でエラーになるので、そこから作業を再開すればよい。

MusicPlayer#addMusicToPlayList()を実装する。

	public void addMusicToPlayList(Music m, PlayList p) {
		p.addMusic(m);
	}

PlayList#addMucis()のコンパイルエラーを解消し、テストにパスさせる。

package jp.abc;

import java.util.ArrayList;
import java.util.List;

public class PlayList {
	private String name;
	private List<Music> musics = new ArrayList<>();

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int countMusic() {
		return musics.size();
	}

	public void addMusic(Music m) {
		musics.add(m);
	}

}

音楽を再生する機能を追加する。
ここでは、再生した順番にMusicを格納したListを返す playAll() を作る。

	@Test
	void 音楽を再生する() {
		MusicPlayer mp = new MusicPlayer();
		mp.addMusic("Lemon", "米津玄師");
		mp.addMusic("flamingo", "米津玄師");
		List<Music> list = mp.playAll();
		assertThat(list.get(0).getTitle(), is("Lemon"));
		assertThat(list.get(1).getTitle(), is("flamingo"));
	}

MusicPlayer#playAll() を再生する。

	public List<Music> playAll() {
		return null;
	}

テストを実行すると、NullPointerExceptionが発生する。

MusicPlayer#playAll() を修正する。

	public List<Music> playAll() {
		return musics;
	}

シャッフル再生機能を追加する。
テストを作成する。
ランダムな結果に対するテストを書くのは難しいので、テストでは曲数だけ確認してコンソール出力を目視で確認する。

	@Test
	void 音楽をシャッフル再生する() {
		MusicPlayer mp = new MusicPlayer();
		mp.addMusic("Lemon", "米津玄師");
		mp.addMusic("flamingo", "米津玄師");
		mp.addMusic("紅蓮華", "LISA");
		mp.addMusic("日本のコメは世界一", "打首獄門同好会");
		mp.addMusic("Killing me", "SIM");
		List<Music> list = mp.playShuffle();
		assertThat(list.size(), is(5));
	}

MusicPayer#playShuffle() を作成する。
とりあえず、シャッフルしないままのmusicsを返しておく。
Musicを追加した順番通りにコンソール出力される。

	public List<Music> playShuffle() {
		// shuffle
		List<Music> list = musics;
		for (Music m : list) {
			System.out.println(m);
		}
		return musics;
	}

Music#toString()を追加してタイトルとアーティストを表示するようにしておく。

	@Override
	public String toString() {
		return "Music [title=" + title + ", artist=" + artist + "]";
	}

シャッフル再生でもとの曲順が変わるのはまずいので、テストを追加しておく。

	@Test
	void 音楽をシャッフル再生する() {
		MusicPlayer mp = new MusicPlayer();
		mp.addMusic("Lemon", "米津玄師");
		mp.addMusic("flamingo", "米津玄師");
		mp.addMusic("紅蓮華", "LISA");
		mp.addMusic("日本のコメは世界一", "打首獄門同好会");
		mp.addMusic("Killing me", "SIM");
		List<Music> list = mp.playShuffle();
		assertThat(list.size(), is(5));
		// シャッフル後も曲順が変わってないことを確認
		assertThat(list.get(0).getTitle(), is("Lemon"));
		assertThat(list.get(1).getTitle(), is("flamingo"));
	}

MusicPlayerを実装する。

	public List<Music> playShuffle() {
		// shuffle
		List<Music> list = new ArrayList<>(musics);
		Collections.shuffle(list);
		for (Music m : list) {
			System.out.println(m);
		}
		return musics;
	}

別の例題に挑戦してみよう!

TDD Boot Camp 大阪 2.0/課題( #tddbc )

飲み物自動販売機を作ってみる。

新規プロジェクト: vendingmachine
新規クラス: jp.abc.VendingMachine
新規JUnitテストケース: jp.abc.VendingMachineTest

package jp.abc;

import static org.junit.jupiter.api.Assertions.*;

import org.junit.jupiter.api.Test;

class VendingMachineTest {

	@Test
	void test() {
		fail("まだ実装されていません");
	}

}

まずは次の課題を実装してみる。
・お金を投入できるようにする。
・投入した金額の総計を取得できる。

package jp.abc;

import static org.hamcrest.CoreMatchers.*;
import static org.junit.Assert.*;

import org.junit.jupiter.api.Test;

class VendingMachineTest {

	@Test
	void お金を投入する() {
		VendingMachine vm = new VendingMachine();
		vm.put(10);
		int total = vm.getTotal();
		assertThat(total, is(10));
	}

}

Eclipseにメソッドを生成してもらってコンパイルエラーを解消する。

package jp.abc;

public class VendingMachine {

	public void put(int i) {
		// TODO 自動生成されたメソッド・スタブ

	}

	public int getTotal() {
		// TODO 自動生成されたメソッド・スタブ
		return 0;
	}

}

Gitでソースコードのバージョン管理する

プロジェクトを右クリックして[チーム]-[プロジェクトの共用] を選択する。
GitとSVNがあるのでGitを選択して「次へ」をクリックする。
リポジトリーの「作成」をクリック。
適当なフォルダを選択して「完了」をクリック。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください