Java はじめて23 〜テスト駆動型開発を行う〜

イントロダクション

テスト駆動開発と聞いて、「すげーことやんのか?」と思った方ごめんなさい。
シンプルに実装の順番が違うだけです。
<サンプル>

今までの開発の場合

  1. 設計: プログラムの設計(アプリケーションの設計)
  2. 実装: 設計に従い、プログラムを実装(アプリケーションのの実装)
  3. ユニット・テストの作成: 作成したプログラムがちゃんと動くかチェックするためのテストケースを作成
  4. ユニット・テスト実施
  5. 結合テスト: 今まで作成したプログラムを全て繋げて、アプリケーションをして動かしてテスト仕様通りに動くか確認

テスト駆動開発の場合

  1. 設計: プログラムの設計(アプリケーションの設計)、テスト仕様の作成
  2. ユニット・テスト: これから作成するプログラムがテスト仕様通りに動くことを確認するプログラム、テストケースを作成
  3. 実装: 設計に従い、プログラムを実装(アプリケーションのの実装)、ただしテストケースが全て通るように作成する
  4. 結合テスト: 今まで作成したプログラムを全て繋げて、アプリケーションをして動かしてテスト仕様通りに動くか確認

上記のように作業工程が1つ少ない形での作業になります。仕様(このように動く、という取り決め)が先行して作成されるので出来上がるアプリケーションも、想定通りに作成することができ、作業工程が1つ減るのでスピードも上がります。

テストケースの作成

初めに、JUnitのライブラリを参照する様に設定します。

やり方は、以下を参照下さい。

開発環境構築~Windows版Eclipseの設定~

開発環境のセットアップを初めから記載しています。使用しているのはEclipseです。

今回は、JUnitを使用して以下のことを実行します。

  1. テスト仕様の作成
  2. テストケース(コード)の作成
  3. 本番のクラスを作成する

テスト駆動型開発

世間ではいろいろなことが言われていますが、シンプルに「テスト仕様から作成する方法」という意味で記載しています。
シンプルに「テスト仕様から作成する」ということはどいうことかに関して、ちょいと記載します。
早い話が、「このクラスはどう動けば良いの?」から考える実装方法だと思っています。「テスト駆動型開発」という言葉を作った人間ではないので、この様な書き方になります。

ちなみに、JUnitが使用できるかどうかに関しては下の様に「JUnit」がワークスペース上に表示されていれば大丈夫です。下の画像には「JUnit5」があります。

例外として、存在するけど動かないということもありますが、それはエラーが出力され、コンソールに「XXXException」と表示されるのでそれをインターネットで調べてみると解決します。
ちなみに、自分の場合は以下の様にアノテーションをつけてやると動きました。Springなどのフレームワークを使用している場合は、それぞれのテストさ癖方法があるのでそちらを参照されたし。。。JUnit5を使用している場合です

@@RunWith(JUnit5.class)
public class MyTest {
テストケース
}

テスト仕様を考える

前回作成した、仕様と設計より「口座管理クラス」を作成することにしました。この口座管理クラスはファイルを使用してデータを保存したり、更新したりします。

本番で使用するクラスとテストクラスを分けるために以下の様に完全クラス名は同じだけどルートフォルダが違う形で作成します。
今回作成するクラスは、KozaManagerクラスです。

そして、テストクラスは下の様に「test」フォルダ以下に作成します。

テスト仕様

テスト仕様というと堅苦しい感じがしますが、早い話が「どう動けば良いか?」を決めるところです。ちょっと慎重にいきます。
しかし、今回はファイルに出力するだけなので深く考えません。

ちなみに、深く考えると下の様になります。

テスト仕様

  1. 操作するファイルが存在しなければ、作成し、存在すればそのまま参照する
  2. 同様にファイルへ(口座の)ユーザー情報をファイル(CSV形式)への出力、保存ができること
  3. 同様にファイルの読み込みができること
  4. 読み込んだファイルのデータをユーザー情報クラスで取得できること(同様にファイルへ出力できること)

CSVファイルを作成

CSVファイルはカンマ区切りのテキストファイルです。

項目1, 項目2 , ....
データ1, データ2, ...

この様な形で、データを保存します。今回は、口座情報なのと最小限度の情報を登録するので、ユーザーとパスワード、預金額をデータとして保存します。

早速テストが動くか確認します。
```java
public class KozaManagerTest {
/** テスト対象クラス */
private KozaManager target;
/**
* テストの初期化
* 各テスト実行前に起動する
*/
// @Before
// public void initClass() {
// target = new KozaManager();
// }
/**
* isFileメソッドのテストケース
*/
@Test
public void testIsFile() {
System.out.println("Hello JUnit");
}
}
```
ちなみに、コンストラクタを動かしたくないので今はコメントアウトしています。まずは、テストが動くか確認します。

テストを実行するときは下の様に表示されます、

<JUnitでデバックをしてみた>

他にも、こんなことをやってみました。

今日はこの辺で失礼します。

<<< 前回 次回 >>>

<Java関連の動画リスト>

<JUnit関連の動画リスト>

でわでわ。。。