2009-01-07 63 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越来越不确定的规则,但我认为这是足以让这个想法。最后,从最简单的测试开始,当你有一个新的测试想法时,或者当你发现自己质疑时,将测试添加到列表中:如果...发生了什么。