首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >发现单一责任原则违反时的Tdd工作流

发现单一责任原则违反时的Tdd工作流
EN

Stack Overflow用户
提问于 2014-08-06 14:25:30
回答 2查看 107关注 0票数 1

我想跟踪TDD。所以我的问题是

我有与方法的接口风险

代码语言:javascript
复制
boolean check(...)

Risk1和Risk2首先是执行测试,所以现在已经完全涵盖了它们。我决定,检查所有风险的单位(CompositeRisk)也可以实施风险。CompositeRisk对每个Risk1和Risk2 rezult应用OR (如果一个风险为真,那么整个风险就有风险)。不过,一切都是先考验的。

现在我正在寻找一个风险和思考-这个有单词“和”,并检查不同的领域。我似乎可以将其拆分为两个对象,并创建多一个CompositeAndRisk,这将适用于这两个被分割的风险。通过这种方式,我可以为风险决策树构建DSL (看起来不错,因为风险规则可能会发生很大变化)。

所以我该怎么处理风险--我要做的是分开测试?我应该改名为CompositeAndRiskTest吗?我应该删除它吗?我应该为splitClasses编写测试吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-08-07 08:33:32

首先,我建议您将CompositeRisk类转换为一个接口,并有两个独立的子类:CompositeOrRiskCompositeAndRisk。不过,这只是设计的问题。

关于你的问题,我相信没有一个正确的答案,所以让我分享一下我是如何看待它的。

如您所知,在TDD中有您遵循的具体步骤(构成TDD周期),并且测试应该在它们之间处于一个特定的状态。我的意思是:

代码语言:javascript
复制
[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),然后从旧类中删除不再需要的功能,以及现在的冗余测试用例。

票数 2
EN

Stack Overflow用户

发布于 2014-08-07 11:36:22

在这种情况下,我采取的方法是“假装它是无辜的”--当您发现一个新的需求时,只需编写一个测试和它的实现,假装一开始就忽略了与以前的需求之间的关系。

这里的"And“案例显然是新功能。此时不需要修改现有测试的内容,只需使用一个反映新需求的名称创建另一个测试,例如CompositeAndRiskTest并创建相应的实现。

然后,在重构步骤中,“意识到”前两个对象是同一枚硬币的两个侧面,并相应地重构它们。这可能意味着将CompositeRisk重命名为CompositeOrRisk,或者更复杂的事情。

一旦识别、测试和实现了这两种风险,您就可以继续并为它们的组合创建新的测试。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25162973

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档