JUnitテストを使ってMusicPlayerを作るプログラミングの続きです。
プレイリストを作る() と、追加した音楽の確認() にテストコードを追加。
package jp.abc;
import static org.junit.Assert.*;
import org.junit.jupiter.api.Test;
class MusicPlayerTest {
@Test
void 音楽を追加する() {
MusicPlayer mp = new MusicPlayer();
mp.addMusic("Official髭男dism", "パラボラ");
int n = mp.countMusic();
assertEquals(1, n);
mp.addMusic("Official髭男dism", "ノーダウト");
n = mp.countMusic();
assertEquals(2, n);
}
@Test
void 追加した音楽の確認() {
MusicPlayer mp = new MusicPlayer();
mp.addMusic("Official髭男dism", "パラボラ");
Music m = mp.getMusic(0);
assertNotNull(m);
assertEquals("Official髭男dism", m.getArtist());
assertEquals("パラボラ", m.getTitle());
mp.addMusic("Official髭男dism", "ノーダウト");
m = mp.getMusic(1);
assertNotNull(m);
assertEquals("ノーダウト", m.getTitle());
}
@Test
void プレイリストを作る() {
MusicPlayer mp = new MusicPlayer();
mp.addPlayList("お気に入り");
int n = mp.countPlayList();
assertEquals(1, n);
}
@Test
void プレイリストの確認() {
MusicPlayer mp = new MusicPlayer();
mp.addPlayList("お気に入り");
PlayList p = mp.getPlayList(0);
assertNotNull(p);
assertEquals("お気に入り", p.getName());
}
}
テストにパスするように、MusicPlayerを修正したもの。
package jp.abc;
import java.util.ArrayList;
import java.util.List;
public class MusicPlayer {
private List<Music> musicList = new ArrayList<>();
private List<PlayList> playListList = new ArrayList<>();
public void addMusic(String artist, String title) {
Music m = new Music();
m.setArtist(artist);
m.setTitle(title);
musicList.add(m);
}
public int countMusic() {
return musicList.size();
}
public Music getMusic(int i) {
return musicList.get(i);
}
public void addPlayList(String name) {
PlayList pl = new PlayList();
pl.setName(name);
playListList.add(pl);
}
public int countPlayList() {
return playListList.size();
}
public PlayList getPlayList(int i) {
return playListList.get(0);
}
}
プレイリストの確認() で2個めのプレイリストを取得するテストを追加。
@Test
void プレイリストの確認() {
MusicPlayer mp = new MusicPlayer();
mp.addPlayList("お気に入り");
PlayList p = mp.getPlayList(0);
assertNotNull(p);
assertEquals("お気に入り", p.getName());
mp.addPlayList("BGM");
p = mp.getPlayList(1);
assertEquals("BGM", p.getName());
}
テストを実行するとエラーになる。
テストにパスするように、MusicPlayerを修正する。
public void addPlayList(String name) {
PlayList pl = new PlayList();
pl.setName(name);
playListList.add(pl);
}
public int countPlayList() {
return playListList.size();
}
public PlayList getPlayList(int i) {
return playListList.get(i);
}
プレイリストに音楽を追加する機能を、MusicPlayerに追加していきます。
まずはテストコードを追加します。
@Test
void プレイリストに音楽を追加する() {
MusicPlayer mp = new MusicPlayer();
mp.addPlayList("お気に入り");
mp.addPlayList("BGM");
assertEquals(2, mp.countPlayList());
mp.addMusicToPlayList("お気に入り", "Official髭男dism", "パラボラ");
}
テストにパスするようにMusicPlayerを実装する。
とりあえず、MusicPlayerに音楽を追加できるようにして、テストにパスするように修正。
public void addMusicToPlayList(String name, String artist, String title) {
addMusic(artist, title);
}
テストを追加する。
プレイリストから音楽を取得してタイトルを確認する。
@Test
void プレイリストに音楽を追加する() {
MusicPlayer mp = new MusicPlayer();
mp.addPlayList("お気に入り");
mp.addPlayList("BGM");
assertEquals(2, mp.countPlayList());
mp.addMusicToPlayList("お気に入り", "Official髭男dism", "パラボラ");
int n = mp.countMusic();
assertEquals(1, n);
PlayList p = mp.getPlayList(0);
assertNotNull(p);
assertEquals("お気に入り", p.getName());
Music m = p.getMusic(0);
assertEquals("パラボラ", m.getTitle());
}
まずはPlayListに複数の音楽を追加するための準備をする。
package jp.abc;
import java.util.List;
public class PlayList {
private String name;
private List<Music> musicList;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Music getMusic(int i) {
return musicList.get(i);
}
}
プレイリストを名前で検索するする必要があるので、そのメソッドを作るためのテストを作る。
@Test
void プレイリストを名前で検索する() {
MusicPlayer mp = new MusicPlayer();
mp.addPlayList("お気に入り");
mp.addPlayList("BGM");
assertEquals(2, mp.countPlayList());
PlayList p = mp.getPlayList("BGM");
assertEquals("BGM", p.getName());
}
コンパイルエラーを解消するために、プレイリストを名前で検索するメソッドを、MusicPlayerに追加する。
public PlayList getPlayList(String name) {
return null;
}
プレイリストを名前で検索するテストにパスするように、getPlayList()を修正。
public PlayList getPlayList(String name) {
for (PlayList p : playListList) {
if (p.getName().equals(name)) return p;
}
return null;
}
これで、「プレイリストを名前で検索する()」がグリーンになった。
次は、「プレイリストに音楽を追加する()」をグリーンにしたい。
addMusic(artist, title) の戻り値で追加したMusicを返すように修正する。
public Music addMusic(String artist, String title) {
Music m = new Music();
m.setArtist(artist);
m.setTitle(title);
musicList.add(m);
return m;
}
現在の全体のコードを掲載。
MusicPlayerTest.java
package jp.abc;
import static org.junit.Assert.*;
import org.junit.jupiter.api.Test;
class MusicPlayerTest {
@Test
void 音楽を追加する() {
MusicPlayer mp = new MusicPlayer();
mp.addMusic("Official髭男dism", "パラボラ");
int n = mp.countMusic();
assertEquals(1, n);
mp.addMusic("Official髭男dism", "ノーダウト");
n = mp.countMusic();
assertEquals(2, n);
}
@Test
void 追加した音楽の確認() {
MusicPlayer mp = new MusicPlayer();
mp.addMusic("Official髭男dism", "パラボラ");
Music m = mp.getMusic(0);
assertNotNull(m);
assertEquals("Official髭男dism", m.getArtist());
assertEquals("パラボラ", m.getTitle());
mp.addMusic("Official髭男dism", "ノーダウト");
m = mp.getMusic(1);
assertNotNull(m);
assertEquals("ノーダウト", m.getTitle());
}
@Test
void プレイリストを作る() {
MusicPlayer mp = new MusicPlayer();
mp.addPlayList("お気に入り");
int n = mp.countPlayList();
assertEquals(1, n);
}
@Test
void プレイリストの確認() {
MusicPlayer mp = new MusicPlayer();
mp.addPlayList("お気に入り");
PlayList p = mp.getPlayList(0);
assertNotNull(p);
assertEquals("お気に入り", p.getName());
mp.addPlayList("BGM");
p = mp.getPlayList(1);
assertEquals("BGM", p.getName());
}
@Test
void プレイリストを名前で検索する() {
MusicPlayer mp = new MusicPlayer();
mp.addPlayList("お気に入り");
mp.addPlayList("BGM");
assertEquals(2, mp.countPlayList());
PlayList p = mp.getPlayList("BGM");
assertEquals("BGM", p.getName());
}
@Test
void プレイリストに音楽を追加する() {
MusicPlayer mp = new MusicPlayer();
mp.addPlayList("お気に入り");
mp.addPlayList("BGM");
assertEquals(2, mp.countPlayList());
mp.addMusicToPlayList("お気に入り", "Official髭男dism", "パラボラ");
int n = mp.countMusic();
assertEquals(1, n);
PlayList p = mp.getPlayList(0);
assertNotNull(p);
assertEquals("お気に入り", p.getName());
Music m = p.getMusic(0);
assertEquals("パラボラ", m.getTitle());
}
}
MusicPlayer.java
package jp.abc;
import java.util.ArrayList;
import java.util.List;
public class MusicPlayer {
private List<Music> musicList = new ArrayList<>();
private List<PlayList> playListList = new ArrayList<>();
public Music addMusic(String artist, String title) {
Music m = new Music();
m.setArtist(artist);
m.setTitle(title);
musicList.add(m);
return m;
}
public int countMusic() {
return musicList.size();
}
public Music getMusic(int i) {
return musicList.get(i);
}
public void addPlayList(String name) {
PlayList pl = new PlayList();
pl.setName(name);
playListList.add(pl);
}
public int countPlayList() {
return playListList.size();
}
public PlayList getPlayList(int i) {
return playListList.get(i);
}
public PlayList getPlayList(String name) {
for (PlayList p : playListList) {
if (p.getName().equals(name)) return p;
}
return null;
}
public void addMusicToPlayList(String name, String artist, String title) {
Music m = addMusic(artist, title);
PlayList p = getPlayList(name);
}
}
MusicPlayer.javaの以下の部分を修正する。
public void addMusicToPlayList(String name, String artist, String title) {
Music m = addMusic(artist, title);
PlayList p = getPlayList(name);
p.addMusic(m);
}
PlayList.java に以下のコードを追加すると、「プレイリストに音楽を追加する()」がグリーンになる。
package jp.abc;
import java.util.ArrayList;
import java.util.List;
public class PlayList {
private String name;
private List<Music> musicList = new ArrayList<>();
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Music getMusic(int i) {
return musicList.get(i);
}
public void addMusic(Music m) {
musicList.add(m);
}
}
新たに「 新規プレイリストに音楽を追加する() 」テストを追加する。
@Test
void 新規プレイリストに音楽を追加する() {
MusicPlayer mp = new MusicPlayer();
mp.addMusicToPlayList("お気に入り", "Official髭男dism", "パラボラ");
int n = mp.countMusic();
assertEquals(1, n);
n = mp.countPlayList();
assertEquals(1, n);
}
addMusic()と同様に、addPlayList()も追加したPlayListを戻り値で返すように修正する。
public PlayList addPlayList(String name) {
PlayList pl = new PlayList();
pl.setName(name);
playListList.add(pl);
return pl;
}
MusicPlayerのaddMusicToPlayList()を修正して、テストをグリーンにする。
public void addMusicToPlayList(String name, String artist, String title) {
Music m = addMusic(artist, title);
PlayList p = getPlayList(name);
if (p == null) {
p = addPlayList(name);
}
p.addMusic(m);
}