ホソカワです。
続きをちょっと。
on 2000/08/29 0:04 AM, Kaoru Hosokawa at khosokawa@....com wrote:
> ホソカワです。
…
> 「太郎、花子」コンビで書いてみます。
>
> 太郎:まずは、テストを書きます。(太郎がキーボードを持っています。)どう?
> Memberをクリエイトして、メールアドレスが等しいかどうかチェックしています。
>
> public void testNewMember() {
> String mailAddress = "aaa@....ccc";
> Member member = new Member(mailAddress);
> assertEquals(member.getMailAddress(), mailAddress);
> }
>
> 花子:いいんじゃないの。ただ、コンストラクタ−にメールアドレスを渡しているの
> はどうして?setMailAddress()で後から設定すればいいじゃない?
>
> 太郎:メンバーはメールアドレスが必須だから、コンストラクタ−のパラメータにし
> たの。
>
> 花子:なるほど。じゃ、メールアドレスのチェックは?変なメールアドレスはエラー
> で返すべきでは?
>
> 太郎:変なメールアドレスかどうかのチェックは大変だし、まだ、問題になっていな
> いから、後回しにします。いい?じゃ、コンパイルしますね。(もちろん、エラーで
> ボロボロ。)さあ、Memberを書こうか?
>
> class Member {
> private String mailAddress;
>
> public Member(String mailAddress) {
> this.mailAddress = mailAddress;
> }
>
> public String getMailAddress() {
> return mailAddress;
> }
> }
>
> (これをコンパイルし、テストを実行すると、テストもパスします。)
>
> 花子:うまく行ったね。setMailAddress() は、書かないの?
>
> 太郎:今は、必要がないから、書かなくてもいいんじゃない?ヤグニ(YAGNI)って
> やつ。
>
> 花子:今度は、私がキーボードを持ちます。MemberListを書きますね。まずは、テス
> トから。
>
> public void testNewMemberList() {
> MemberList memberList = new MemberList;
> assertEquals(memberList.getSize(), 0);
> }
>
> public void testOneMemberList() {
> MemberList memberList = new MemberList;
> Member member = new Member("aaa@....ccc");
> memberList.add(member);
> assert(memberList.getSize(), 1);
> }
>
> public void testTwoMemberList() {
> MemberList memberList = new MemberList;
> Member firstMember = new Member("aaa@....ccc");
> Member secondMember = new Member("ddd@....fff");
> memberList.add(firstMember);
> memberList.add(secondMember);
> assert(memberList.getSize(), 2);
> }
>
> // ...
>
> という感じでMemberListの続きとMemberAuthorizationを書いてみます。どなたか、
> 実際にコンパイル、実行していただけると嬉しいです。
# また、インデントが消えてしまいました。すみません。
太郎:MemberListの中身を書こうか?リストでインプリする事になるけど、
ArrayListとか使うのかな?
花子:ArrayListを使った事がないけど… The Simplest Thing That Could Possibly
Work (TSTTCPW)でしょうね。普通の配列もあるけど、動的にサイズを拡張するコード
を書くのは面倒ですね。
class MemberList {
private List members = new ArrayList();
public add(Member member) {
members.add(member);
}
public getSize() {
return members.size();
}
}
太郎:ArrayListのサイズ取得メソッドは、size()だから、MemberListもsize()にし
た方がきれいだよ。
花子:そうしましょう。さて、addだけでは、ダメで、getも必要ですよ。テスト書き
ます。
public void testGet0() {
MemberList memberList = new MemberList;
Member member = new Member("aaa@....ccc");
memberList.add(member);
assertEquals(member.getMailAddress(),
memberList.get(0).getMailAddress());
}
public void testGet1() {
MemberList memberList = new MemberList;
Member firstMember = new Member("aaa@....ccc");
Member secondMember = new Member("ddd@....fff");
memberList.add(firstMember);
memberList.add(secondMember);
assertEquals(secondMember.getMailAddress(),
memberList.get(1).getMailAddress());
}
#すみません。Wordwrapがオフれず、変なインデントになっています。
花子:じゃ、中身を書きます。
public get(int index) {
return members.get(index);
}
太郎:いいんじゃない。それから、メンバーリストが空の時のgetやindexがsizeより
大きい時のgetのテストも必要だね。
花子:書いてみますね。
public void testEmptyGet() {
bool exceptionThrown = false;
MemberList memberList = new MemberList;
try {
Member member = memberList.get(0);
} catch (NoSuchElementException e) {
exceptionThrown = true;
}
assert(exceptionThrown);
}
public void testOutOfRangeGet() {
bool exceptionThrown = false;
MemberList memberList = new MemberList;
Member member = new Member("aaa@....ccc");
memberList.add(member);
try {
Member member = memberList.get(1);
} catch (NoSuchElementException e) {
exceptionThrown = true;
}
assert(exceptionThrown);
}
…と続くわけですが、なんか自分の世界に浸っていると言う感じと、実際にコンパイ
ル、実行していないので、ちょっと続けるのがきついです。でも、太郎と花子と二つ
の頭で考えるのは悪くないような気がします。ただ、この会話形式でポストするのは
面倒ですね。
--
Kaoru Hosokawa
khosokawa@....com