当前位置: 首页 > 面试题库 >

如果B类涵盖了我应该为A类编写测试

翟淇
2023-03-14
问题内容

我想对测试方法学发表一些意见。

假设我们拥有A类和B类。B类使用A类的功能。B类已经过全面测试,因此某些测试覆盖范围也间接应用于A类。

我应该直接为A类编写完整的测试吗?还是只应该测试未经测试的A类功能?

我之所以问是因为,将来可能会以不使用A类相同功能的方式删除或修改B类,因此可能会使某些方法未经测试。你会怎么做?


问题答案:

类别!=单位

如果您练习一个好的TDD,您将很容易理解其背后的原因。

IMO,您应该B基于A已经被测试的事实来测试的行为。

实际上,有三种情况:

AB同一层:

  • 如果A是通过重构周期(提取类)创建的B(在练习一个良好的TDD时经常发生),那么A应该完全不进行测试!完全不需要测试!
    实际上,代码的结构(在这种情况下,是类/ SRP的分离)应该独立于 单元 概念;B并且A在这种情况下属于同一单位。

  • 如果在此 之前*A存在,则不应基于此事实,并且应测试其整个行为。 *B``B``B

AB不是局限于同一层(例如,边界不同):

  • 如果B是GUI类和A业务类,则A在测试时应加倍/模拟B,并且A还应具有专用的完整测试。
    实际上,领域架构不应与behavior/feature概念混为一谈。

要了解原因,请阅读鲍勃叔叔最近有关此概念的文章:

http://blog.8thlight.com/uncle-
bob/2014/01/27/TheChickenOrTheRoad.html?utm_source=hootsuite&utm_campaign=hootsuite

摘录:

一个普遍的误解是,测试的设计必须反映生产代码的设计。正如作者所建议的那样,TDD不需要“系统中的每个单元都必须与设计良好的单元测试配对”。确实,这就是我们许多人不再称其为“单元”测试的原因之一。

注意:TDD不在乎“未来”,相反,它可以帮助您编写所需数量的代码,仅此而已。因此,您不必为此担心:

将来可能会删除或修改B类

如果您编写了良好的测试(我更喜欢“ specs”一词),则将立即检测到这种删除。



 类似资料:
  • 我一直在学习使用Jest库编写JavaScript/TypeScript代码的单元测试。下面是一个我不知道如何处理的例子。它是用TypeScript输入的——只有两个公共方法和一个构造函数需要service1参数。 我想我需要测试两种情况: > 如果 函数为空。我没有在代码中看到它的任何实现,也不知道它是如何工作的。我应该把它作为参数传递给这个类的实例吗? 我很困惑,在这个特定的例子中,我应该使用

  • 当实验完成,下一步就是分析结果。 A/B测试工具将显示实验中的数据,并会告诉您使用数学方法和统计的帮助,网页上的不同变化如何执行,以及变化之间是否存在显着差异。 示例 如果网页上的图像降低了跳出率,当在网页上上传多个图像时可以判断决定是否有良好的转换。 如果您因此看到跳出率没有变化,请返回上一步并创建一个新的假设/变体以执行新的测试。 像VWO和Optimizely这样的工具可用于运行测试,但Go

  • 有人能给我解释一下如何为下面这样的apex触发器编写测试类吗? 我是Salesforce的新手。有人帮助我如何为上述触发器编写顶点类(测试类)吗? AccountBrowseExtensionTesttestAccountBrowseSystem。DmlException:插入失败。第0行第一个异常;第一个错误:FIELD\u CUSTOM\u VALIDATION\u EXCEPTION,Cit

  • 我尝试了一些代码在Java中交换两个整数,而不使用第三个变量,即使用XOR。 以下是我尝试的两个交换函数: 该代码产生的输出如下: 我很想知道,为什么会有这样的说法: 和这个不一样?

  • 问题内容: 我尝试了一些代码,使用XOR在Java中交换两个整数而不使用第三个变量。 这是我尝试的两个交换函数: 这段代码产生的输出是这样的: 我很好奇,为什么这样说: 与这个不同吗? 问题答案: 问题是评估的顺序: 参见JLS第15.26.2节 首先,对左操作数求值以产生一个变量。 如果该评估突然完成,则赋值表达式由于相同的原因而突然完成;右边的操作数不会被评估,并且不会发生赋值。 否则,将保存

  • 我有一种类型看起来是这样的: 和一个函数 我也试过 但是GHC说是不推荐使用的,这是一个坏主意,更严重的是,我得到: 我认为这是说约束实际上不能用我希望的方式将约束为,这是很明显的(因为有两个类型变量):-( 当然,这也是无效的,哈斯克尔 是否有类似的类型类我可以使用,或者我尝试使用类型类来实现“隐式规范化函数调用的结果”的功能是错误的?