【问题标题】:Test boundary: Check if a function calls another function or check the outcome of this another function测试边界:检查一个函数是否调用另一个函数或检查另一个函数的结果
【发布时间】:2017-12-14 21:39:43
【问题描述】:

我正在为一个函数编写单元测试。根据输入,该函数将调用其他一些函数。

我可以通过

验证预期的行为
  1. 模拟被调用的函数并检查是否使用预期的参数调用(或未调用)它们
  2. 或者检查这些其他函数的结果

我更喜欢#1,因为我相信这些其他功能的结果应该在他们自己的相应测试中进行测试。但我的同事更喜欢 #2。

有人可以帮助我了解管理此问题的原则吗?

【问题讨论】:

  • 我的问题是,你想如何模拟其他函数(如果它们不属于任何结构)?

标签: unit-testing tdd


【解决方案1】:

如果结果本身难以测试,则选项 1 并非不可能。但选项 2 更可取。为什么?

因为选项 1 测试实现细节。这反过来又锁定了这些细节。

选项 2 不了解实现。这支持更改设计。

如果您能够测试结果,则无需为每个单元编写测试。如果我们使用 TDD 扩展解决方案,生产代码可能会从更大的功能开始。每个重构都将得到测试的支持。也许我们会提取其他功能。也许我们会提取整个类。谁能说?使用 TDD,我们可以推迟这些决定。我们甚至可以改变主意。

【讨论】:

    猜你喜欢
    • 2018-09-15
    • 1970-01-01
    • 1970-01-01
    • 2017-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-13
    相关资源
    最近更新 更多