gpt4 book ai didi

unit-testing - 单元测试模式

转载 作者:行者123 更新时间:2023-12-03 07:08:47 26 4
gpt4 key购买 nike

我正在寻找以下单元测试案例的解决方案/模式。

案例:

假设我们有三个类,A、B、C,每个类都有一种方法。 A的方法调用B的方法,B的方法又调用C的方法。所以,A->B->C。每种方法采用一个输入(方法 A 的输入 A、输入 B、输入 C)。调用方法 A 的结果输出将是一个树结构,例如:

根(从方法 A 创建) -- 节点 B(从方法 B 创建) -- 节点C1 -- 节点 C2(均由方法 C 创建)

对我来说,单元测试是关于单独测试方法输入的输出。因此,我们将为上述每种方法编写单元测试。由于测试是孤立编写的,因此我们在为方法 A 编写单元测试时会模拟方法 B,在为方法 B 编写单元测试用例时会模拟方法 C。

到目前为止,一切都很好,我们可以为每个方法的输出编写期望,以确保尊重生成的树结构。

问题:

现在让我们添加另一个类来调用方法 B,这样我们就有了以下调用链:D->B->C。生成的根树如下所示:

  • 根D
    • 节点 B
      • 节点 C1
      • 节点C2

在开发过程中,有人意识到方法A的需求被误解了,树的结果应该是这样的:

  • 根A
    • 节点 B
      • 节点C

幸运的是,开发人员更改了方法 C,以便输出仅返回一个节点而不是两个。他将更改单元测试以反射(reflect)这些更改。但是,方法 D 的要求不应改变,并且该方法的输出仍应具有节点 C1 和节点 C2。

问题:

您将如何编写单元测试,以便第二个开发人员能够收到他为方法 D 引入的重大更改的警报?我宁愿避免集成测试,这似乎最适合这里。

谢谢。

最佳答案

您应该混合使用“纯1”单元测试、不纯单元测试、集成(外部资源命中)测试和全堆栈测试(UI 关闭)。 “纯粹的”单元测试并不是测试的结束。

因此,您最终将为您开发的每个功能进行以下一些类型的测试:

  • 单元测试 - 单独点击 A - 如果较低级别很复杂或触及外部资源。
  • 也是单元测试(但有时也称为集成或组件测试) - 在外部资源(例如数据库)之前将 A 降到(大约)级别 - 如果较低级别很复杂,但经过测试或者如果较低级别并不复杂。
  • 集成测试 - 点击 A 和数据库。
  • 全栈测试 - 在某个时刻点击恰好调用 A 的 UI - 我的目标是至少有一些处于此级别(如 Cukes 等)或以下级别的测试。

只要您进行了一些更高级别的测试,即使达到 A 隔离的测试没有失败,它们也应该会失败。

刚使用“纯单元测试”这个短语,因为有些人认为单元测试的定义是孤立的方法

关于unit-testing - 单元测试模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16211692/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com