关于TDD的另一个问题来自我。我已经阅读了一些关于TDD的文章和书籍章节,我理解为什么你应该TDD并且我理解这些简单的例子,但是当我在现实世界中尝试这个时,我似乎很容易陷入困境。
如果您要编写Windows Vista附带的着名蜘蛛纸牌,您能否给我一些简单的TDD示例?你会从哪些测试开始?
答案 0 :(得分:3)
好吧,当你问蜘蛛纸牌的TDD时,你基本上都在询问如何设计这样的游戏。测试将是设计决策的结果。纸牌游戏是一款简单的游戏,但从头开始设计这样的游戏并非易事(不止一种方式)。
你可能想要从更简单的设计开始,比如数字猜测游戏(系统生成一个随机数,你尝试尽可能少地猜测它)。
这种简单游戏的一些功能将是:
由此您可以尝试这些测试(就像粗略的例子,但很容易编码):
secret_number >= 1 && secret_number <= 10
。number > secret_number
时返回“HIGH”,在number < secret_number
时返回“LOW”,在number == secret_number
时返回“WIN”吗? 这只是一个非常粗略的概述,绝不是完整的。但是你可以从英文描述中看到代码示例会更加冗长。我想如果你想要更具体的答案,你必须提出一个更具体的问题。
答案 1 :(得分:3)
纸牌游戏涉及卡片。
所以,你想到了一个Card类。您为单个Card对象编写了一些测试。你写了你的卡类来通过测试。
你需要一个洗牌并处理布局的牌组。您可以想到Deck类和shuffle算法以及它如何维护处理状态。你为一个洗牌和交易的甲板写了一些测试。你编写你的Deck类来通过测试。 [注意,这需要一个实际上不是随机的模拟随机数生成器。]
纸牌游戏涉及空白空间和卡片的布局。一些空的规则空间(仅限国王或仅限Aces)。纸牌游戏有时会涉及股票,或多或少是甲板的遗体。
所以你想到一个带有卡片空间的Layout类。您为布局编写了一些测试并放入各种卡片。编写Layout类来传递测试。
然后有关于哪些卡可以从布局移动的规则。整个堆栈,子堆栈,顶级卡,等等。你有一个AllowedMove或GameState或一些这样的类。同样的演习。大致定义它的作用,编写测试,完成课程。
您有用户界面和显示内容。演习是一样的。
粗略地上课。
定义测试。
完成课程。
等
我在OO Design的书中详细介绍了这一点。
答案 2 :(得分:2)
首先,你应该从引擎中分离GUI 。 TDDing GUI是最难的部分,因此您应尽可能保持GUI层尽可能薄。谷歌为“简陋的对话框”并阅读tddui list on Yahoo! groups。
引擎层将实现游戏规则。我不确定蜘蛛纸牌与古代单人纸牌(即Windows 3.1)的不同之处在于我的基础如下:
这是我将从以下开始的初始测试列表:
我对规则不确定,但我认为这足以得到这个想法。
最后,从最简单的测试开始,当您有新的测试想法时,或者当您发现自己质疑时,将测试添加到列表中:如果......会发生什么。
答案 3 :(得分:0)