矢崎です。
タスク[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