我想跟踪TDD。所以我的问题是
我有与方法的接口风险
boolean check(...)Risk1和Risk2首先是执行测试,所以现在已经完全涵盖了它们。我决定,检查所有风险的单位(CompositeRisk)也可以实施风险。CompositeRisk对每个Risk1和Risk2 rezult应用OR (如果一个风险为真,那么整个风险就有风险)。不过,一切都是先考验的。
现在我正在寻找一个风险和思考-这个有单词“和”,并检查不同的领域。我似乎可以将其拆分为两个对象,并创建多一个CompositeAndRisk,这将适用于这两个被分割的风险。通过这种方式,我可以为风险决策树构建DSL (看起来不错,因为风险规则可能会发生很大变化)。
所以我该怎么处理风险--我要做的是分开测试?我应该改名为CompositeAndRiskTest吗?我应该删除它吗?我应该为splitClasses编写测试吗?
发布于 2014-08-07 08:33:32
首先,我建议您将CompositeRisk类转换为一个接口,并有两个独立的子类:CompositeOrRisk和CompositeAndRisk。不过,这只是设计的问题。
关于你的问题,我相信没有一个正确的答案,所以让我分享一下我是如何看待它的。
如您所知,在TDD中有您遵循的具体步骤(构成TDD周期),并且测试应该在它们之间处于一个特定的状态。我的意思是:
[State = No tests]
1. Write a test that fails
[State = Test fails]
2. Write as little code as possible in order for the test to pass
[State = Test passes]
3. Refactor
[State = Test still passes]考虑到这正是我们在TDD中的目标,我将在重构阶段进行您正在讨论的更改,包括相应地重构测试。
这意味着,如果我分裂一个类,我也将分割相关的测试。测试绝不能失败,因为我只是在改变代码的结构,而不是它所做的事情(这毕竟是重构的意思)。
如果您需要做更大的更改,我将从头开始创建一个新类(当然是TDD),然后从旧类中删除不再需要的功能,以及现在的冗余测试用例。
发布于 2014-08-07 11:36:22
在这种情况下,我采取的方法是“假装它是无辜的”--当您发现一个新的需求时,只需编写一个测试和它的实现,假装一开始就忽略了与以前的需求之间的关系。
这里的"And“案例显然是新功能。此时不需要修改现有测试的内容,只需使用一个反映新需求的名称创建另一个测试,例如CompositeAndRiskTest并创建相应的实现。
然后,在重构步骤中,“意识到”前两个对象是同一枚硬币的两个侧面,并相应地重构它们。这可能意味着将CompositeRisk重命名为CompositeOrRisk,或者更复杂的事情。
一旦识别、测试和实现了这两种风险,您就可以继续并为它们的组合创建新的测试。
https://stackoverflow.com/questions/25162973
复制相似问题