当开发TDD时,您的对象会随着代码的发展而“增长”。首先,它们只包含一些功能,然后添加新功能。基本上可以通过组合和/或继承来完成。
同时,您几乎总是使用接口(用于测试和生产代码)来确保低耦合、依赖反转、依赖注入和模拟。
你是怎么处理这个的?
我的意思是,例如:您已经创建了一个类,现在它必须包含一个新属性(例如,一个人现在可以拥有一封电子邮件)。该怎么办呢?
在某种程度上,界面也会发生类似的事情。
因此,随着代码的增长,构造函数--接口--必须进化。我心里有三个戒律:
所以就像我说的..。如何在开发TDD的同时管理所有这些?我知道这是一个需要长时间回答的问题,所以,如果你能参考一些好的文章或资源
发布于 2015-05-15 10:49:48
更改测试是可以的,
你所描述的(人现在有一封电子邮件)是对规格的改变。单元测试应该是您的规范,所以在引入新数据时必须更改它们是正常的。
这种测试的脆弱性是对质量的一种交换,是一种必要的邪恶。
不要过度设计
通过尝试应用OCP、继承和组合来添加一个字段,您只会使事情变得更加复杂。正如您所指出的,它仅仅是为了测试而导致产生代码的不正常,而且您还必须修改测试。
如果要在现有的一系列行为中添加新的行为,OCP可能是好的,但这里的情况并非如此。
使更改更易于管理
有一些策略可以使您的测试对小的更改更具抵抗力,但是它们主要是在测试级别实现的,而不是在生产代码中实现的。此外,如果您经常在测试中寻找重复,例如在TDD周期的重构步骤中,那么这方面的机会就很容易发现。
其中之一是将您的“系统被测试”创建封装到一个工厂法中,并在每个测试中调用它而不是普通的构造函数。使其大多数参数具有默认值可选。这将允许您在一个地方进行更改(例如添加电子邮件字段),所有测试都将从中受益。这并不能使您免于修改测试套件,但您只需要在一个地方进行。
https://stackoverflow.com/questions/30246763
复制相似问题