Index: [Article Count Order] [Thread]

Date:  Wed, 13 Sep 2000 19:48:37 +0900
From:  firo <firo@....jp>
Subject:  [XP-jp:00882] VXP タスク3 --Config
To:  extremeprogramming-jp@....jp (extremeprogramming-jp ML)
Message-Id:  <00Sep13.194931jst.115202@....jp>
Posted:  Wed, 13 Sep 2000 19:49:30 +0900
X-Mail-Count: 00882

矢崎です。

タスク[XP-jp00850](タスクの番号をつけないといけませんね?3で
いいでしょうか?)のコーディングにはいりたいと思います。

[XP-jp00860]でホソカワさんご指摘のとおり、[XP-jp00850]では、
Big Design Up Frontになりすぎたきらいもありますが、とりあえず、あそ
こに書いた流れをベースに考えてみたいと思います。

なお、ペアプロをするにあたり、私は1人で2役こなせる力量がありませ
んので、太郎さんに専念します。どなたか(多数歓迎)花子さん役に
なって、どんどんつっこみメールください。

#太郎さんになっていただいてもOK。(^^)

ここから、

(太郎says)
今日はタスク1の開発をしよう。これはクラス数も少しばかり多いので
効率よく仕事しなきゃ、3日では終わらないぞ。

どこから手をつけようかな(CRCセッションメモ[XP-jp00850]に目を通す)。

Configクラスあたりから始めよう。こいつは、設定ファイルを処理する責務
を持つクラスだけれど、こんなやつもわざわざクラスにする必要があるの
かな?
Cあたりなら、Configファイルを開いて、そこからデータを読み込んで、変数
にセットして、必要なときにその変数の値を参照する、くらいでいいような
気もするのだけれど、まあ、セッションでは一応クラスとして識別されたし、
とりあえず、クラスとしてコーディングすることにしよう。

じゃ、早速テストを書きますか、、、
いちおうおきまり部分を書いてコンパイルっと、

・・・・

/*
 * @(#)ConfigTest.java
 */
package XP.jp.co.esm.wiki.extremedomo;

import junit.framework.*;

public class ConfigTest extends TestCase {

    public ConfigTest(String name) {
        super(name);
    }

    public static void main(String[] args) {
        junit.textui.TestRunner.run(ConfigTest.class);
    }

    protected void setUp() {
    }

    protected void tearDown(){
    }

}

・・・・

(太郎says)

よし。コンパイルは通ったぞ。

では、まずはコンストラクタから始めよう。
Configオブジェクトは、設定ファイルの内容をメモリ上に展開した
ものと考えればいいんだよな。ファイル名をコンストラクタの引数
でもらって、それでファイルを開いて、ファイルの中身をを解析し
てそれをインスタンス変数にいれるんだろうな。
ところで、設定ファイルは1つだけなのかな?これについては、
質問ボード(矢崎注:勝手に設置)に質問メモをはっておこう。

・・・・
(質問カード)

質問:設定ファイルは1つだけという前提でいいでしょうか?

・・・・

(太郎says)

それと設定ファイルの形式はたしか[XP-jp:00804]によれば、

>- ML の名前
>  ヘッダーの書きかえの時につかう、例えば XP-jp
>- シークエンス番号を管理するファイル名
>- 配送先アドレス
>- optional なメールのヘッダー
>  例えば
>
>  X-ML-Name: extremeprogramming-jp
>  X-Mail-Count: 00796
>  X-MLServer: fml [fml 2.1_GAMMA#185](distribute only mode)
>  X-ML-Info: If you have a question, please make a contact with
extremeprogramming-jp-admin@....jp

だから、上の情報がちゃんととれるかどうかテストすればいいんだよな。
それと、そのファイル名でファイルがなかったときとか、ファイルの中身
がきちんと定義されていなかったときのことも考えなきゃね。

じゃあ、ちょっとテストを書いてみるね。


・・・・

/*
 * @(#)ConfigTest.java
 */
package XP.jp.co.esm.wiki.extremedomo;

import junit.framework.*;

public class ConfigTest extends TestCase {

    public ConfigTest(String name) {
        super(name);
    }

    public static void main(String[] args) {
        junit.textui.TestRunner.run(ConfigTest.class);
    }

    public void testConstructor1(){

        Config aConfig = new Config("config");
        assertEquals("extremeprogramming-jp", aConfig.getName());
        assertEquals("00796", aConfig.getCount());
        assertEquals("fml [fml 2.1_GAMMA#185](distribute only mode)",
aConfig.getServer());
        assertEquals(" If you have a question, please make a contact
with extremeprogramming-jp-admin@....jp", aConfig.getInfo());

    }

    public void testConstructor2(){

        try{
            Config aConfig = new Config("nonconfig");
            fail("Should raise an IllegalArgumentException");
        }catch(IllegalArgumentException e){
            assert(true);
        }

    }

    public void testConstructor3(){

        Config aConfig = new Config("badconfig");

        try{
            aConfig.getName();
            fail("Should raise an IllegalArgumentException1");
        }catch(IllegalArgumentException e){
            assert(true);
        }

        try{
            aConfig.getCount();
            fail("Should raise an IllegalArgumentException2");
        }catch(IllegalArgumentException e){
            assert(true);
        }

        try{
            aConfig.getServer();
            fail("Should raise an IllegalArgumentException3");
        }catch(IllegalArgumentException e){
            assert(true);
        }

        try{
            aConfig.getInfo();
            fail("Should raise an IllegalArgumentException4");
        }catch(IllegalArgumentException e){
            assert(true);
        }

    }

    protected void setUp() {
    }

    protected void tearDown(){
    }

}

・・・・
(太郎says)
はい、それじゃコンパイル、、

もちろん通るわけないよね。だって、まだConfigクラスが何も
できていないんだもの。。

じゃあ、次はコンパイルが通るところまで、Configクラスを書きましょう。

こんな具合かな。

・・・・

/*
 * @(#)Config.java
 */
package XP.jp.co.esm.wiki.extremedomo;

public class Config {
    public Config(String nameOfConfigFile) {
    }

    public String getName() {
        return null;
    }

    public String getCount() {
        return null;
    }

    public String getServer() {
        return null;
    }

    public String getInfo() {
        return null;
    }

}

・・・・
getXXXはリターンが必要だから一応nullを返しておくことに
するよ。じゃあ、ConfigTestとConfigのコンパイル。

(コンパイル中)

はい、両方とも無事に通りました。

ではテスト、、
   > java XP.jp.co.esm.wiki.extremedomo.ConfigTest

(テスト中)

はい、予定どおり全てfailure。

じゃあ、そろそろテストが通るようにConfigを書きましょう。
でもちょっと休憩、コーヒー飲んでくる。



--
矢崎博英  firo@....jp