Unit testing “a”是什么;“单位”是多少;?
在单元测试的上下文中,“单元”是什么 我们将“单元”定义为单个类 正如您正确地断言的那样,“单元”是一个模棱两可的术语,当开发人员只使用表达式而不添加细节时,这会导致混淆。在我工作的地方,我们花时间来定义我们所说的“单元测试”、“验收测试”等的含义。当有人加入团队时,他们学习了我们的定义Unit testing “a”是什么;“单位”是多少;?,unit-testing,language-agnostic,Unit Testing,Language Agnostic,在单元测试的上下文中,“单元”是什么 我们将“单元”定义为单个类 正如您正确地断言的那样,“单元”是一个模棱两可的术语,当开发人员只使用表达式而不添加细节时,这会导致混淆。在我工作的地方,我们花时间来定义我们所说的“单元测试”、“验收测试”等的含义。当有人加入团队时,他们学习了我们的定义 从实践的角度来看,对于“单位”是什么,可能总是存在不同的意见。我发现重要的是,这个术语在项目中的使用是一致的。可以是不同的东西。一个类、一个模块、一个文件。。。选择所需的测试粒度。虽然定义可能有所不同,“单元”
从实践的角度来看,对于“单位”是什么,可能总是存在不同的意见。我发现重要的是,这个术语在项目中的使用是一致的。可以是不同的东西。一个类、一个模块、一个文件。。。选择所需的测试粒度。虽然定义可能有所不同,“单元”是一段独立的代码 通常是一节课 然而,很少有类是孤立存在的。因此,您经常需要模拟与您的被测类协作的类 因此,“单元”(也称为“夹具”)是一个可测试的东西——通常是一个类加上协作者的模型 您可以使用单元测试技术轻松地测试相关类的包。我们一直都这样做。这些装置中很少或没有模拟
事实上,您可以将整个独立应用程序作为单个“单元”进行测试。我们也这样做。提供一组固定的输入和输出,以确保整个应用程序正确运行。我通常将其定义为通过单个方法执行的单个代码执行路径。根据经验法则,测试方法所需的单元测试数量等于或大于方法的数量。单元是可以单独测试的任何元素。因此,几乎总是在OO环境中测试方法,以及该类方法之间存在紧密耦合的一些类行为。我想说,单元是一个“黑匣子”,可以在应用程序中使用。它具有已知的接口,并提供定义良好的结果。这是一个必须根据设计规范工作的东西,并且必须是可测试的
话虽如此,我在构建此类“黑匣子”中的项目时经常使用单元测试作为开发辅助。我想说,单元测试中的单元是一个类的单独责任 当然,这种观点来自我们的工作方式: 在我的团队中,我们使用术语单元测试来测试单个类的责任。我们使用mock对象来覆盖所有其他对象,这样类的职责就被真正隔离了,如果其他对象中有错误,就不会受到影响 我们将术语集成测试用于测试两个或多个类如何一起工作的测试,以便我们看到实际的功能存在 最后,我们帮助我们的客户编写验收测试,这些测试在整个应用程序上运行,以查看“用户”使用应用程序时实际发生的情况
这让我觉得这是一个很好的描述。如果我工作的话,“单位”是一个函数。这是因为我们不允许在设计中使用除功能分解之外的任何东西(无OOP)。我百分之百同意威尔的答案。至少这是我在发动机、飞行控制和各种其他系统的嵌入式编程工作范例中的答案 根据我的经验,关于“什么是单位”的辩论是浪费时间 更重要的是“测试有多快?”快速测试以100+/秒的速度运行。缓慢的测试运行得足够慢,以至于您不会在每次暂停思考时都本能地运行它们 如果您的测试速度很慢,您就不会频繁地运行它们,这会延长错误注入和错误检测之间的时间 如果您的测试很慢,那么您可能得不到单元测试的设计好处 想要快速测试吗?跟着迈克尔·费瑟的 但是,如果您的测试速度很快,并且它们帮助您编写代码,谁会在乎它们有什么标签呢?我的理解(或基本原理)是,单元应该遵循抽象层次和范围,类似于代码的层次分解 方法是一个小的、通常是原子的(概念上)操作,抽象级别较低,因此应该对其进行测试 类是提供服务和状态的中级概念,因此应该进行测试 一个完整的模块(特别是如果它的组件是隐藏的)是一个具有有限接口的高级概念,因此应该对其进行测试,等等
由于多个方法和类之间的交互会产生许多bug,因此我不知道仅对单个方法进行单元测试如何实现覆盖,直到您已经有了使用每个重要组合的方法,但这表明您在编写客户机代码之前没有进行足够的测试 这并不重要。当然,您要求开始单元测试是正常的,但我重复一遍,这并不重要 该单元大致如下:
- 测试调用的方法。在OOP中,必须在类的实例上调用此方法(静态方法除外)
- 过程语言中的函数李>
- 自动执行和诊断
- 快速-您将经常运行它们
- 原子测试——一个测试只能测试一件事
- 隔离-试验不得相互依赖
- 可重复-结果应具有确定性 <