Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unit testing “a”是什么;“单位”是多少;?_Unit Testing_Language Agnostic - Fatal编程技术网

Unit testing “a”是什么;“单位”是多少;?

Unit testing “a”是什么;“单位”是多少;?,unit-testing,language-agnostic,Unit Testing,Language Agnostic,在单元测试的上下文中,“单元”是什么 我们将“单元”定义为单个类 正如您正确地断言的那样,“单元”是一个模棱两可的术语,当开发人员只使用表达式而不添加细节时,这会导致混淆。在我工作的地方,我们花时间来定义我们所说的“单元测试”、“验收测试”等的含义。当有人加入团队时,他们学习了我们的定义 从实践的角度来看,对于“单位”是什么,可能总是存在不同的意见。我发现重要的是,这个术语在项目中的使用是一致的。可以是不同的东西。一个类、一个模块、一个文件。。。选择所需的测试粒度。虽然定义可能有所不同,“单元”

在单元测试的上下文中,“单元”是什么

我们将“单元”定义为单个类

正如您正确地断言的那样,“单元”是一个模棱两可的术语,当开发人员只使用表达式而不添加细节时,这会导致混淆。在我工作的地方,我们花时间来定义我们所说的“单元测试”、“验收测试”等的含义。当有人加入团队时,他们学习了我们的定义


从实践的角度来看,对于“单位”是什么,可能总是存在不同的意见。我发现重要的是,这个术语在项目中的使用是一致的。

可以是不同的东西。一个类、一个模块、一个文件。。。选择所需的测试粒度。

虽然定义可能有所不同,“单元”是一段独立的代码

通常是一节课

然而,很少有类是孤立存在的。因此,您经常需要模拟与您的被测类协作的类

因此,“单元”(也称为“夹具”)是一个可测试的东西——通常是一个类加上协作者的模型

您可以使用单元测试技术轻松地测试相关类的包。我们一直都这样做。这些装置中很少或没有模拟


事实上,您可以将整个独立应用程序作为单个“单元”进行测试。我们也这样做。提供一组固定的输入和输出,以确保整个应用程序正确运行。

我通常将其定义为通过单个方法执行的单个代码执行路径。根据经验法则,测试方法所需的单元测试数量等于或大于方法的数量。

单元是可以单独测试的任何元素。因此,几乎总是在OO环境中测试方法,以及该类方法之间存在紧密耦合的一些类行为。

我想说,单元是一个“黑匣子”,可以在应用程序中使用。它具有已知的接口,并提供定义良好的结果。这是一个必须根据设计规范工作的东西,并且必须是可测试的


话虽如此,我在构建此类“黑匣子”中的项目时经常使用单元测试作为开发辅助。

我想说,单元测试中的单元是一个类的单独责任

当然,这种观点来自我们的工作方式:

在我的团队中,我们使用术语单元测试来测试单个类的责任。我们使用mock对象来覆盖所有其他对象,这样类的职责就被真正隔离了,如果其他对象中有错误,就不会受到影响

我们将术语集成测试用于测试两个或多个类如何一起工作的测试,以便我们看到实际的功能存在

最后,我们帮助我们的客户编写验收测试,这些测试在整个应用程序上运行,以查看“用户”使用应用程序时实际发生的情况


这让我觉得这是一个很好的描述。

如果我工作的话,“单位”是一个函数。这是因为我们不允许在设计中使用除功能分解之外的任何东西(无OOP)。我百分之百同意威尔的答案。至少这是我在发动机、飞行控制和各种其他系统的嵌入式编程工作范例中的答案

根据我的经验,关于“什么是单位”的辩论是浪费时间

更重要的是“测试有多快?”快速测试以100+/秒的速度运行。缓慢的测试运行得足够慢,以至于您不会在每次暂停思考时都本能地运行它们

如果您的测试速度很慢,您就不会频繁地运行它们,这会延长错误注入和错误检测之间的时间

如果您的测试很慢,那么您可能得不到单元测试的设计好处

想要快速测试吗?跟着迈克尔·费瑟的

但是,如果您的测试速度很快,并且它们帮助您编写代码,谁会在乎它们有什么标签呢?

我的理解(或基本原理)是,单元应该遵循抽象层次和范围,类似于代码的层次分解

方法是一个小的、通常是原子的(概念上)操作,抽象级别较低,因此应该对其进行测试

类是提供服务和状态的中级概念,因此应该进行测试

一个完整的模块(特别是如果它的组件是隐藏的)是一个具有有限接口的高级概念,因此应该对其进行测试,等等


由于多个方法和类之间的交互会产生许多bug,因此我不知道仅对单个方法进行单元测试如何实现覆盖,直到您已经有了使用每个重要组合的方法,但这表明您在编写客户机代码之前没有进行足够的测试

这并不重要。当然,您要求开始单元测试是正常的,但我重复一遍,这并不重要

该单元大致如下:

  • 测试调用的方法。在OOP中,必须在类的实例上调用此方法(静态方法除外)
  • 过程语言中的函数
但是“单元”、函数或方法也可以从应用程序调用另一个“单元”,这同样由测试执行。因此,“单元”可以跨越多个函数甚至多个类

“测试比单元更重要”()。良好的试验应为:

  • 自动执行和诊断
  • 快速-您将经常运行它们
  • 原子测试——一个测试只能测试一件事
  • 隔离-试验不得相互依赖
  • 可重复-结果应具有确定性
  • <