当你想出一个系统的一部分应该如何工作的整体设计/想法时,你如何决定在做TDD时从哪里开始,或者更确切地说,你如何决定你的第一个测试开始?
让我们假设我正在编写一个叫做Oven
烘焙我美味Pie
物品的类.这就是我逐步完成单元测试的顺序:
我需要做什么来实例化对象?在这种情况下Oven oven = new Oven();
,我想很可能是没有测试这个.
如何准备使用对象?oven.turnOn(int degrees)
听起来不错,我会这样做的.我该如何检查?更好oven.getTemperature()
.有一个明显的考验.
好吧,烤箱现在已经够热了,我想烘烤我的烤箱Pie
.为此我需要,oven.bake(Pie p)
所以我会做到这一点.但现在呢?我想检查馅饼是否已经准备好,而不是让oven.isPieReady()
我认为oven.pastryStatus()
哪些东西会返回"烤箱里没什么","生吃","差不多完成","煮熟"和"烧焦"听起来不错,一般来说应该更多可以延伸oven.isPieReady()
,我会这样做.
等等等等.所以,我将按顺序进行测试,我希望使用对象来改进规范.最后,我通常会得到相当简单但功能强大的API,它可以满足我的需求.在我对我的API进行单元测试之后,我对我的代码进行了覆盖,以查看我错过的内容,然后为这些内容添加额外的测试.