Float on the flow

とあるエンジニアのブログ。「ゆったり・しっかり」がモットー。

TDDの勉強会に参加

テスト駆動開発(TDD)の勉強会に参加してきました。

詳しい内容は以下をご覧下さい。
http://kanazawa-process.g.hatena.ne.jp/katzchang/20090517/1242513168
http://d.hatena.ne.jp/katzchang/20090517/p1


テキストには「テスト駆動開発入門」を使っています。

テスト駆動開発入門
テスト駆動開発入門
posted with amazlet at 09.05.17
ケント ベック
ピアソンエデュケーション
売り上げランキング: 194071


以下、感想と、今回進んだところ(9章)までのソースコードです。

感想

実は勉強会形式のイベントに参加するのは初だったのですが、
いきなり発表者のご指名をいただいたり。
基本的に写経(テキストを読んで、書いてあるコードを入力する)を
すればよいので、なんとかなりました。
id:Nagiseさんのように薀蓄は語れませんが、学習者視点での疑問とかを
出すことはできたかな、と。


あとは、はてなの話題とか濃い話がフツーにできる環境ってのが新鮮でしたw
はじめまして感も、良い意味であまり無く。


同時に、これまでの自分の勉強不足を痛感したり。
前の職場では「技術も詳しくて、説明とかもやれる人」という位置づけだったけど、
まったくもって井の中の蛙だったんだなー、と。


それから、参加者の使用環境が!

さすがです。*1

ソースコード

今回進んだ9章完了時点までのコードを上げておきます。*2

import junit.framework.TestCase;

public class MoneyTest extends TestCase{
	
	public void testMultiplication(){
		Money five = Money.dollar(5);
		assertEquals(Money.dollar(10), five.times(2));
		assertEquals(Money.dollar(15), five.times(3));
	}
	
	public void testFrancMultiplication(){
		Money five = Money.franc(5);
		assertEquals(Money.franc(10), five.times(2));
		assertEquals(Money.franc(15), five.times(3));
	}

	public void testEquality(){
		assertTrue(Money.dollar(5).equals(Money.dollar(5)));
		assertFalse(Money.dollar(5).equals(Money.dollar(6)));
		assertTrue(Money.franc(5).equals(Money.franc(5)));
		assertFalse(Money.franc(5).equals(Money.franc(6)));
		assertFalse(Money.franc(5).equals(Money.dollar(5)));
	}

	public void testCurrency(){
		assertEquals("USD", Money.dollar(1).currency());
		assertEquals("CHF", Money.franc(1).currency());
	}
}
public abstract class Money {
	protected int amount;
	protected String currency;
	
	Money(int amount, String currency){
		this.amount = amount;
		this.currency = currency;
	}
	
	public boolean equals(Object object){
		Money money = (Money) object;
		return amount == money.amount
			&& getClass().equals(money.getClass());
	}
	
	static Money dollar(int amount){
		return new Dollar(amount, "USD");
	}
	
	public static Franc franc(int amount) {
		return new Franc(amount, "CHF");
	}

	abstract Money times(int multiplier);
	
	String currency(){
		return currency;
	}
}
public class Dollar extends Money{

	Dollar(int amount, String currency){
		super(amount, currency);
	}

	Money times(int multiplier){
		return Money.dollar(amount * multiplier);
	}
}
public class Franc extends Money{
	
	Franc(int amount, String currency){
		super(amount, currency);
	}

	Money times(int multiplier){
		return Money.franc(amount * multiplier);
	}
}

さいごに

Aキーのキートップがはずれやすくなっていて、何度か地味に修理。
これ書いてるときもまた外れました…

*1:Macほしくなるね。余裕ないけどorz

*2:はてなグループのほうに上げたほうがいいでしょうか?