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

标签 tdd mocking

读完马丁·福勒(Martin Fowler)的Mocks Aren't Stubs之后,我发现我一直在以“模拟主义者”的方式练习TDD。

但是我想知道,即使在 mock 者TDD中,是否也可以 mock 得太远。

这是pythont伪代码中的更新后的示例:

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()。

这合理吗?还是应该 mock 那些用Confirm_or_create_connection()和sync()调用的对象? (我已经对这两种方法进行了其他测试。)

请不要通过解释我应该练习“古典” TDD来回答问题。这是另一个问题的答案:Should I practice mockist or classical TDD?

最佳答案

由于某种原因,该技术被称为“模拟对象”,而不是“模拟方法”。它鼓励设计将系统划分为易于组合,协作的对象,并且远离程序代码。目的是提高抽象级别,以便您大多数情况下都是通过编写对象来进行编程的,而很少编写低级的控制流语句。

关于tdd - 作为 "mockist"TDD的从业者,我应该模拟与被测方法在同一类中的其他方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/184729/

相关文章:

ruby-on-rails - 与 Capybara (Rails) 的 TDD; page.should 和 expect(page).to 之间的区别?

java - 使用 Mockito 和 Android 模拟 Drawable

java - 仅出于测试目的模拟 Web 服务

asp.net-mvc - 用虚拟数据填充 POCO 的最佳方法是什么?

ios - 如何模拟符合协议(protocol)并被 OCMock 模拟的对象的属性?

c++ - 使用 C++ 的 TDD 和内务管理开销

c++ - 如何编译和链接单元测试?

javascript - 在 Jest 测试中,使用 requireActual 不需要模块的实际版本

mysql - 为 PHPUnit 模拟 MySQL DB

java - PowerMockito 模拟单个静态方法并在另一个静态方法中返回对象