矢崎です。
[XP-jp:00861]までの以下のコードを整理してみました。
MemberAuthorizerTest.java
MemberAuthorizer.java
MemberListTest.java
MemberList.java
AllTests.java
JUnitのテストまで通っています。
でお願いがあるのですが、どなたか以下のコードをCVSにチェックインして
いただけないでしょうか?今、壁の中なのでこちらからはできないのです。
#Member.javaと、MemberTest.javaについては既ににチェックインされて
いるようなので、対象からはずしました。
##追記
[XP-jp:00861]までの、と書きましたが、私の考えた修正が多少はいって
います。
1.MemberAuthorizerのverifyメソッドは不要になったようなので、今は
コメントアウトしています。私の認識がまちがっていなければ削除します。
2.1にともなって、MemberAuthorizerTestのtestInvalidMemberメソッドも
不要になった?(だから今はコメントです)私の認識がまちがっていなければ
削除します。
3.MemberListTestのtestDuplicationMemberメソッドを修正しました。
4.MemberListTestにtestContainsメソッドを追加。
5.MemberListのaddメソッドを修正。
6.MemberListのcontainsメソッドを修正。
/*
* @(#)MemberAuthorizerTest.java
*/
package XP.jp.co.esm.wiki.extremedomo;
import junit.framework.*;
public class MemberAuthorizerTest extends TestCase {
public MemberAuthorizerTest(String name) {
super(name);
}
public static void main(String[] args) {
junit.textui.TestRunner.run(MemberAuthorizerTest.class);
}
public void testValidMember() {
assert(authorizer.isValid(firstMember));
}
/* public void testInvalidMember() {
assert(!authorizer.verify(invalidMember.getMailAddress()));
}*/
protected void setUp() {
memberList.add(firstMember);
memberList.add(secondMember);
authorizer = new MemberAuthorizer(memberList);
}
private MemberAuthorizer authorizer;
private MemberList memberList = new MemberList();
private Member firstMember = new Member("aaa@....ccc");
private Member secondMember = new Member("ddd@....fff");
private Member invalidMember = new Member("xxx@....zzz");
}
/*
* @(#)MemberAuthorizer.java
*/
package XP.jp.co.esm.wiki.extremedomo;
import java.util.*;
public class MemberAuthorizer {
public MemberAuthorizer(MemberList aMemberList) {
memberList = aMemberList;
}
/* public boolean verify(String aMailAddress) {
return memberList.mailAddressSet().contains(aMailAddress);
}*/
public boolean isValid(Member member) {
return memberList.contains(member);
}
private MemberList memberList;
}
/*
* @(#)MemberListTest.java
*/
package XP.jp.co.esm.wiki.extremedomo;
import junit.framework.*;
public class MemberListTest extends TestCase {
public MemberListTest(String name) {
super(name);
}
public static void main(String[] args) {
junit.textui.TestRunner.run(MemberListTest.class);
}
public void testNewMemberList() {
MemberList memberList = new MemberList();
assertEquals(memberList.size(), 0);
}
public void testOneMemberList() {
MemberList memberList = new MemberList();
memberList.add(firstMember);
assertEquals(memberList.size(), 1);
}
public void testDuplicationMember() {
MemberList memberList = new MemberList();
memberList.add(firstMember);
memberList.add(secondMember);
try {
memberList.add(firstMember);
fail("Should raise an IllegalArgumentException1");
} catch (IllegalArgumentException e) {
assert(true);
}
Member nullAddressMember = new Member(null);
memberList.add(nullAddressMember);
try {
memberList.add(nullAddressMember);
fail("Should raise an IllegalArgumentException2");
} catch (IllegalArgumentException e) {
assert(true);
}
Member sameAddressMember = new Member("aaa@....ccc");
try {
memberList.add(sameAddressMember);
fail("Should raise an IllegalArgumentException3");
} catch (IllegalArgumentException e) {
assert(true);
}
try {
memberList.add(null);
assert(true);
} catch (IllegalArgumentException e) {
fail("Should raise an IllegalArgumentException4");
}
}
public void testGetMember() {
MemberList memberList = new MemberList();
memberList.add(firstMember);
memberList.add(secondMember);
assertEquals(
firstMember,
memberList.get(firstMember.getMailAddress())
);
}
public void testUnmodifiableMemberSet() {
MemberList memberList = new MemberList();
memberList.add(firstMember);
memberList.add(secondMember);
try {
memberList.mailAddressSet().add("xxx@....zzz");
fail("Should raise an UnsupportedOperationException");
} catch (UnsupportedOperationException e) {
assert(true);
}
}
public void testUnmodifiableMailAddressSet() {
MemberList memberList = new MemberList();
memberList.add(firstMember);
memberList.add(secondMember);
try {
memberList.memberSet().add(new Member("xxx@....zzz"));
fail("Should raise an UnsupportedOperationException");
} catch (UnsupportedOperationException e) {
assert(true);
}
}
public void testContains(){
MemberList memberList = new MemberList();
Member thirdMember = new Member("ggg@....iii");
Member forthMember = new Member("jjj@....lll");
Member fifthMember = new Member("aaa@....ccc");
Member sixthMember = new Member("ddd@....fff");
Member seventhMember = new Member(null);
memberList.add(firstMember);
memberList.add(secondMember);
memberList.add(thirdMember);
assert("test1", memberList.contains(firstMember));
assert("test2", memberList.contains(secondMember));
assert("test3", memberList.contains(thirdMember));
assert("test4", ! memberList.contains(forthMember));
assert("test5", memberList.contains(fifthMember));
assert("test6", memberList.contains(sixthMember));
assert("test7", ! memberList.contains(seventhMember));
assert("test8", ! memberList.contains(null));
memberList.add(seventhMember);
assert("test9", memberList.contains(seventhMember));
}
protected void setUp() {
firstMember = new Member("aaa@....ccc");
secondMember = new Member("ddd@....fff");
}
private Member firstMember;
private Member secondMember;
}
/*
* @(#)MemberList.java
*/
package XP.jp.co.esm.wiki.extremedomo;
import java.util.*;
public class MemberList {
public void add(Member aMember) {
if (contains(aMember)) throw new IllegalArgumentException();
if (aMember == null) return;
members.put(aMember.getMailAddress(), aMember);
}
public Member get(String aMailAddress) {
return (Member)members.get(aMailAddress);
}
public int size() {
return members.size();
}
public Set memberSet() {
return Collections.unmodifiableSet(members.entrySet());
}
public Set mailAddressSet() {
return Collections.unmodifiableSet(members.keySet());
}
public boolean contains(Member member) {
if (member == null) return false;
return mailAddressSet().contains(member.getMailAddress());
}
private HashMap members = new HashMap();
}
/*
* @(#)AllTests.java
*/
package XP.jp.co.esm.wiki.extremedomo;
import junit.framework.*;
public class AllTests {
public static void main (String[] args) {
junit.textui.TestRunner.run(suite());
}
public static Test suite() {
TestSuite suite= new TestSuite("All Tests");
suite.addTest(new
TestSuite(XP.jp.co.esm.wiki.extremedomo.MemberTest.class));
suite.addTest(new
TestSuite(XP.jp.co.esm.wiki.extremedomo.MemberListTest.class));
suite.addTest(new
TestSuite(XP.jp.co.esm.wiki.extremedomo.MemberAuthorizerTest.class));
return suite;
}
}
Kaoru Hosokawa さんwrote:
>
>
> Test-First Programming を実践しようと思っていますので、テストからコメントし
> ます。
>
> testValidMember() を、書き直して見ました
>
> private MemberAuthorizer authorizer;
>
> public void testValidMember() {
> assert(authorizer.isValid(firstMember));
> }
>
> MemberAuthorization は、データを意味する名前ですので、MemberAuthorizer にか
> えました。Authorizer という言葉はないと思いますが、許可を出す人と言うイメー
> ジです。この人に firstMember は、正会員かどうか訪ねるというコードにしました。
> メールアドレスをgetして渡すよりはシンプルだと思います。
>
> MemberAuthorizer の isValid() は、
>
> public boolean isValid(Member member) {
> return memberList.contains(member);
> }
>
> // public class MemberList
>
> public boolean contains(Member member) {
> return memberList.mailAddressSet().contains(member.getMailAddress());
> }
>
> のように考えました。mailAddressSet() などはあまり外に出したくないという意図
> があります。
>
> #このコードもコンパイル、実行していません。
>
--
矢崎博英 firo@....jp