在阅读了Martin Fowler的Mocks Are Not Stubs之后,我发现我一直在以"模仿者"的方式练习TDD.
但我想知道即使是在模仿者TDD,如果一个人可以嘲笑太远.
这是Python风格的伪代码中的更新示例:
def sync_path(self): if self.confirm_or_create_connection(): self.sync(self.dirpath)
confirm_or_create_connection()方法创建与服务器的连接.
我在两个测试中测试了一个与此类似的方法,这两个测试都模拟confirm_or_create_connection()和sync()(即使它们都是同一个类中的方法).在一个测试中,模拟confirm_or_create_connection()返回True,测试确认已调用sync(),另一个模拟confirm_or_create_connection()返回False,测试确认未调用sync().
这合理吗?或者我应该模拟confirm_or_create_connection()和sync()调用的对象?(我已经对这两种方法进行了其他测试.)
请不要通过解释我应该练习"经典"TDD来回答这个问题.这是另一个问题的答案:我应该练习模仿者还是经典的TDD?
该技术被称为"模拟对象",而不是"模拟方法".它鼓励将系统划分为易于组合的协作对象而远离程序代码的设计.目的是提高抽象级别,以便您通常通过编写对象来编程,而很少编写低级控制流语句.
就个人而言,我认为嘲笑自我几乎总是代码味道.它正在测试实现而不是行为.