テストを実行すると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を選択して「次へ」をクリックする。
リポジトリーの「作成」をクリック。
適当なフォルダを選択して「完了」をクリック。