MusicPlayerをテスト駆動開発で作成してみます。
まずはMusicPlayerクラスを作成。
package jp.abc;
public class MusicPlayer {
}
MusicPlayerクラスを右クリックし、[新規]-[その他]を選択。
フィルターに「ju」を入力すると残り2個になるので、「JUnitテストケース」を選択し「OK」をクリック。
MusicPlayerTestクラスに以下のコードを記述する。
MusicPlayerTestクラスを右クリックし[実行]-[JUnitテスト]を選択すると、テストが実行される。
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);
}
}
Eclipseのクイックフィックスを使用してMusicPlayerクラスのメソッドを生成する。
package jp.abc;
public class MusicPlayer {
public void addMusic(String artist, String title) {
// TODO 自動生成されたメソッド・スタブ
}
public int countMusic() {
return 0;
}
}
このコードを書いた状態でテストを実行すると、結果が赤になる。
ここで、Fakeと言われているコードを記述する。
package jp.abc;
public class MusicPlayer {
public void addMusic(String artist, String title) {
// TODO 自動生成されたメソッド・スタブ
}
public int countMusic() {
return 1;
}
}
countMusic()の戻り値を1にすると、テスト結果がグリーンになる。
テストを追加する。
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);
}
}
テストを追加すると、実行結果が赤になる。
きちんと実装していくために、Musicクラスを作成する。
package jp.abc;
public class Music {
private String artist;
private String title;
public String getArtist() {
return artist;
}
public void setArtist(String artist) {
this.artist = artist;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
}
Musicクラスを作ったら、MusicPlayerクラスの実装を追加する。
package jp.abc;
import java.util.ArrayList;
import java.util.List;
public class MusicPlayer {
private List<Music> musicList = 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();
}
}
countMusic() で musicList.size() を返すことで、テストにパスする実装ができ、テストがグリーンになる。
テストを追加する。
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);
}
}
getMusic()がコンパイルエラーになるので、クイックフィックスでメソッドを追加する。
package jp.abc;
import java.util.ArrayList;
import java.util.List;
public class MusicPlayer {
private List<Music> musicList = 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) {
// TODO 自動生成されたメソッド・スタブ
return null;
}
}
テストでエラーになるので、nullではなくFakeのコードとして new Music() を返す。
package jp.abc;
import java.util.ArrayList;
import java.util.List;
public class MusicPlayer {
private List<Music> musicList = 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 new Music();
}
}
テストでアーティストとタイトルを確認するコードを追加する。
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());
}
}
Fake実装なので、テストがエラーになる。
getMusic() をきちんと実装すると、テストにパスする。
package jp.abc;
import java.util.ArrayList;
import java.util.List;
public class MusicPlayer {
private List<Music> musicList = 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(0);
}
}
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());
}
@Test
void プレイリストを作る() {
MusicPlayer mp = new MusicPlayer();
mp.addPlayList("お気に入り");
}
}
プレイリストを作るために、PlayListクラスを作成する。
package jp.abc;
public class PlayList {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
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(0);
}
public void addPlayList(String name) {
playListList.add(new PlayList());
}
public int countPlayList() {
return playListList.size();
}
}
プレイリストを確認するテストを追加する。
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());
}
@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);
}
}
コンパイルエラーを解消するために、MusicPlayerに getPlayList() を追加する。
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(0);
}
public void addPlayList(String name) {
playListList.add(new PlayList());
}
public int countPlayList() {
return playListList.size();
}
public PlayList getPlayList(int i) {
return null;
}
}