2009-01-07 61 views
2

關於TDD的另一個問題來自我。我已經閱讀了關於TDD的一些文章和書籍章節,並且我明白爲什麼你應該TDD和我理解簡單的例子,但是似乎當我在現實世界中嘗試了這一點時,我很容易陷入困境。TDD Spider Solitaire

如果您要編程Windows Vista附帶的衆所周知的蜘蛛紙牌,您能給我一些簡單的TDD示例嗎?你會開始哪些測試?

回答

0
  1. 名單蜘蛛紙牌的特點[我不玩遊戲卡]
  2. 描述你是如何測試每個功能
3

那麼,當你問TDD for spider solitaire,你基本上在問如何設計這樣的遊戲。測試將是設計決定的結果。紙牌遊戲是一個簡單的遊戲,但從頭開始設計這樣的遊戲並不是微不足道的(有很多方法可以去做)。

您可能想從一個更簡單的設計開始,比如數字猜測遊戲(系統會生成一個隨機數,並嘗試儘可能少地嘗試猜測)。

這樣一個簡單的遊戲中的某些功能是:

  1. 特徵隨機產生1和10之間的祕密數生成新號碼開始一個新遊戲。
  2. 功能比較玩家的輸入是否比這個數字更高或更低,或者如果猜測是正確的
  3. 功能來算猜測

從您可以嘗試這些測試的數量(只作爲粗略的例子,但容易編碼):

  1. 運行你的發電機1000次。每次確認secret_number >= 1 && secret_number <= 10
  2. 對於一組數字(隨機生成),您的比較函數在number > secret_number時返回「HIGH」,number < secret_number時爲「LOW」,number == secret_number時爲「WIN」
  3. 重複之前的測試,但跟蹤您測試的項目數量。當返回「贏」時,請確保您的計數器功能符合您測試的項目數量。

這只是一個非常粗略的概述,並不是完整的。但是你可以從英文的描述中看到代碼示例會更加冗長。我想如果你想要更具體的答案,你必須提出一個更具體的問題。

+0

不應該是「secret_number> = 1」嗎? – guerda 2009-01-07 10:02:07

3

紙牌遊戲涉及卡。

所以,你想到一個卡類。您爲單個卡對象編寫一些測試。你寫你的卡類來通過測試。

您需要一個可以洗牌並處理佈局的套牌。你會想到Deck類和shuffle算法以及它如何保持交易狀態。你爲一個洗牌和交易的套牌寫一些測試。你寫你的Deck類來通過測試。 [注意,這需要一個實際上並不隨機的模擬隨機數發生器。]

紙牌遊戲涉及與空的空間和卡片的佈局。規則的一些空白空間(僅限國王或只有王牌)。紙牌遊戲有時會涉及一個股票,或多或少的甲板遺體。

所以你想到一個佈局類,用卡片空間。您爲佈局編寫一些測試並放入各種卡片。你編寫你的Layout類來通過測試。

然後有什麼卡可以從佈局移動的規則。整個堆棧,子堆棧,頂層卡片,等等。你有一個AllowedMove或GameState或一些這樣的類。相同的演習。大致定義它的功能,編寫測試,完成課程。

你有用戶界面和顯示的東西。演習是一樣的。

  1. 粗糙的類。

  2. 定義測試。

  3. 完成課程。

我在一本書上OO Design部分詳細介紹了。

2

首先,您應該從中分離出GUI,以便。 TDD的GUI是最難的部分,所以你應該保持你的GUI層儘可能薄。谷歌爲「謙卑的對話框」並閱讀tddui list on Yahoo! groups

引擎層將執行遊戲規則。我不知道蜘蛛紙牌從古老的紙牌遊戲的不同之處(即從Windows 3.1),關於這一點我基於以下幾點:

這裏是最初的測試表,我會從開始:

  • 可以總是將卡移動到一個空的堆棧
  • 卡有一個值,並且可以比較卡
  • 只有當卡上方的卡低於移動的卡時,才能將卡移動到非空的堆棧
  • 你總是可以將幾張牌移動到一個空的堆棧
  • 當頂部的卡片比移動的卡片低時,您只能將多張卡片移動到非空的卡片堆棧中,當您將所有翻牌卡片從堆疊中移出時,頂部的卡片可以退回(或自動返回?)
  • 你可以從碼頭一的第一張牌,把在任何堆棧(?)

I'me越來越不確定的規則,但我認爲這是足以讓這個想法。最後,從最簡單的測試開始,當你有一個新的測試想法時,或者當你發現自己質疑時,將測試添加到列表中:如果...發生了什麼。