TDD蜘蛛纸牌

时间:2009-01-07 00:40:31

标签: tdd

关于TDD的另一个问题来自我。我已经阅读了一些关于TDD的文章和书籍章节,我理解为什么你应该TDD并且我理解这些简单的例子,但是当我在现实世界中尝试这个时,我似乎很容易陷入困境。

如果您要编写Windows Vista附带的着名蜘蛛纸牌,您能否给我一些简单的TDD示例?你会从哪些测试开始?

4 个答案:

答案 0 :(得分:3)

好吧,当你问蜘蛛纸牌的TDD时,你基本上都在询问如何设计这样的游戏。测试将是设计决策的结果。纸牌游戏是一款简单的游戏,但从头开始设计这样的游戏并非易事(不止一种方式)。

你可能想要从更简单的设计开始,比如数字猜测游戏(系统生成一个随机数,你尝试尽可能少地猜测它)。

这种简单游戏的一些功能将是:

  1. 在1到10之间随机生成密码的功能。生成新号码即可启动新游戏。
  2. 比较玩家的输入是高于还是低于该数字,或猜测是否正确的功能
  3. 计算猜测次数的功能
  4. 由此您可以尝试这些测试(就像粗略的例子,但很容易编码):

    1. 运行您的发电机1000次。每次都要确保secret_number >= 1 && secret_number <= 10
    2. 对于一组数字样本(随机生成),您的比较函数在number > secret_number时返回“HIGH”,在number < secret_number时返回“LOW”,在number == secret_number时返回“WIN”吗?
    3. 重复上一个测试,但跟踪您测试的项目数。返回“WIN”时,请确保您的计数器功能与测试项目数相符。
    4. 这只是一个非常粗略的概述,绝不是完整的。但是你可以从英文描述中看到代码示例会更加冗长。我想如果你想要更具体的答案,你必须提出一个更具体的问题。

答案 1 :(得分:3)

纸牌游戏涉及卡片。

所以,你想到了一个Card类。您为单个Card对象编写了一些测试。你写了你的卡类来通过测试。

你需要一个洗牌并处理布局的牌组。您可以想到Deck类和shuffle算法以及它如何维护处理状态。你为一个洗牌和交易的甲板写了一些测试。你编写你的Deck类来通过测试。 [注意,这需要一个实际上不是随机的模拟随机数生成器。]

纸牌游戏涉及空白空间和卡片的布局。一些空的规则空间(仅限国王或仅限Aces)。纸牌游戏有时会涉及股票,或多或少是甲板的遗体。

所以你想到一个带有卡片空间的Layout类。您为布局编写了一些测试并放入各种卡片。编写Layout类来传递测试。

然后有关于哪些卡可以从布局移动的规则。整个堆栈,子堆栈,顶级卡,等等。你有一个AllowedMove或GameState或一些这样的类。同样的演习。大致定义它的作用,编写测试,完成课程。

您有用户界面和显示内容。演习是一样的。

  1. 粗略地上课。

  2. 定义测试。

  3. 完成课程。

  4. 我在OO Design的书中详细介绍了这一点。

答案 2 :(得分:2)

首先,你应该从引擎中分离GUI 。 TDDing GUI是最难的部分,因此您应尽可能保持GUI层尽可能薄。谷歌为“简陋的对话框”并阅读tddui list on Yahoo! groups

引擎层将实现游戏规则。我不确定蜘蛛纸牌与古代单人纸牌(即Windows 3.1)的不同之处在于我的基础如下:

这是我将从以下开始的初始测试列表:

  • 您可以随时将卡片移至空白堆栈
  • 一张卡片有一个值,可以与卡片进行比较
  • 当顶部的卡低于移动的卡时,您只能将卡移动到非空堆栈
  • 您可以随时将多张牌移至空筹码
  • 当顶部的卡低于移动的卡时,您只能将多张卡移动到非空堆栈
  • 当您从堆栈中移动所有已转换的卡片时,顶部卡片可以返回(或者应该自动返回?)
  • 您可以从码头拿出第一张卡并放入任意堆栈(?)

我对规则不确定,但我认为这足以得到这个想法。

最后,从最简单的测试开始,当您有新的测试想法时,或者当您发现自己质疑时,将测试添加到列表中:如果......会发生什么。

答案 3 :(得分:0)

  1. 列出蜘蛛纸牌[我不玩纸牌游戏]的功能
  2. 描述了如何测试每个功能
  3. 做到