作为"模拟者"TDD从业者,我应该在与被测试方法相同的类中模拟其他方法吗?

Dar*_*zer 9 tdd mocking

在阅读了Martin Fowler的Mocks Are Not Stubs之后,我发现我一直在以"模仿者"的方式练习TDD.

但我想知道即使是在模仿者TDD,如果一个人可以嘲笑太远.

这是Python风格的伪代码中的更新示例:

def sync_path(self):
    if self.confirm_or_create_connection():
        self.sync(self.dirpath)
Run Code Online (Sandbox Code Playgroud)

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?

Nat*_*Nat 8

该技术被称为"模拟对象",而不是"模拟方法".它鼓励将系统划分为易于组合的协作对象而远离程序代码的设计.目的是提高抽象级别,以便您通常通过编写对象来编程,而很少编写低级控制流语句.


Avd*_*vdi 5

就个人而言,我认为嘲笑自我几乎总是代码味道.它正在测试实现而不是行为.