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
.net 单元测试还是功能测试?_.net_Unit Testing_Functional Testing_Testdrivendesign - Fatal编程技术网

.net 单元测试还是功能测试?

.net 单元测试还是功能测试?,.net,unit-testing,functional-testing,testdrivendesign,.net,Unit Testing,Functional Testing,Testdrivendesign,我最近听说功能测试胜过单元测试 我知道单元测试从最原子的形式测试给定代码的每一种可能性。但是功能测试呢 对我来说,这听起来像是只有在代码工作时才进行测试,但它是否和单元测试一样可靠 有人告诉我,对这件事有两种看法。某些人更喜欢单元测试,其他人则喜欢功能测试 有什么好的资源、链接、书籍、参考资料或你们中的任何一个人可以解释并阐明我在这个问题上的道路吗 谢谢 单元测试与功能测试不是一个异或,而是一个和。单元测试是关于在隔离状态下测试单元,而功能测试是关于在集成状态下测试整体(所有单元是否正常工作?)

我最近听说功能测试胜过单元测试

我知道单元测试从最原子的形式测试给定代码的每一种可能性。但是功能测试呢

对我来说,这听起来像是只有在代码工作时才进行测试,但它是否和单元测试一样可靠

有人告诉我,对这件事有两种看法。某些人更喜欢单元测试,其他人则喜欢功能测试

有什么好的资源、链接、书籍、参考资料或你们中的任何一个人可以解释并阐明我在这个问题上的道路吗


谢谢

单元测试与功能测试不是一个异或,而是一个
。单元测试是关于在隔离状态下测试单元,而功能测试是关于在集成状态下测试整体(所有单元是否正常工作?)


两者都是良好软件工程实践的必要组成部分。

在大多数开发工作中,两者都有一席之地

单元测试是为了测试小的代码单元,以确保它们按预期工作

功能测试用于测试系统的整体功能是否符合预期


单元测试和功能测试有两种不同的结果

单元测试验证一小段代码是否按预期工作。这通常是由开发人员完成的,以确保代码正常工作。它们通常也通过测试框架实现自动化

功能测试通过程序的特定路径验证功能是否按预期工作。它们通常由一个人在软件上执行,以确保程序能够按照预期的方式为用户工作。因此,它的级别更高,因此可以同时测试多个单元

我认为两者都很重要。但是,如果您的资源有限,并且必须选择技术,我认为这取决于您创建的产品,但是对于我所做的(人类通过一些按钮使用的汽车控制产品),功能测试是最重要的。它检查并确保当用户得到产品时,它会做它应该做的事情。这并不意味着我们应该选择退出单元测试,但如果迫在眉睫,功能是确保良好的用户体验和产品推出的最重要因素

例如,如果您生产一个数据库引擎(或其他不一定面向用户的产品),那么单元测试可能是您真正应该做的事情

  • 单元测试=最低粒度级别
  • 功能测试=中等、模块化水平
  • 集成测试=更高的应用程序级别
  • 工厂验收测试=查看所有工作
  • 现场验收测试=全部失败:)

所有这些都是有用的,但它们并不是相互排斥的。你应该做其中的大部分,但你花在每个部分上的时间取决于你从中得到的结果,仅此而已。如果您的代码过于模块化,无法轻松进行单元测试,那么请将精力花在功能测试上。如果你正在编写一个小组件库,花时间对它们进行单元测试,如果你正在为军用导弹编写控制系统,你肯定应该对它们进行现场验收测试(因为即使失败也会发生爆炸,这很有趣:)

单元测试测试你的代码单元(方法等)确保他们做你期望他们做的事

功能测试测试您的系统设计,以确保各部分正确交互。如果您编写一个接受和int并返回一个字符串的命令,并对其进行全面测试,则可以确保它能够正常工作。但是如果没有系统测试,您可能永远不会注意到代码的其余部分认为它可以接受null,但它不能

这两种类型的测试都很重要

编辑:为gbjbaanb所说的内容添加稍微不同的视图:

  • 单元测试=我的代码有效
  • 功能测试=我的设计作品
  • 集成测试=我的代码正确使用了第三方内容(数据库等)
  • 工厂验收测试=我的系统正常工作
  • 站点验收测试=你的代码糟透了,这完全不是我想要的
      杰森的回答是正确的。不同类型的测试有不同的目的,可以分层以获得最佳结果(良好的设计、符合规范、减少缺陷)

      • 单元测试=驱动器设计(带或TDD)
      • 集成测试=所有部件一起工作吗
      • 客户验收测试=是否满足客户要求
      • 手动测试=通常覆盖UI;专门的测试人员可以发现自动化遗漏了什么
      • 负载测试=系统在实际数据量下的性能如何
      这些类别之间有一些重叠;例如,单元测试可以指定行为

      还有其他的,;欲知更多,请参阅

      人们忽略的一点是,单元测试是孤立地测试代码片段。例如,好的单元测试不会影响数据库。这有两个优点:它使测试运行得更快,因此您可以更频繁地运行它们;它迫使您编写松散耦合的类(更好的设计)

      你要求资源;我推荐罗伊·奥舍洛夫的书。虽然没有一本书是十全十美的,但这本书在编写好的测试方面给出了许多极好的建议


      编辑:对于编写针对现有软件的测试,没有什么能比得上Michael Feathers的书。

      功能测试,也称为功能测试,旨在测试整个系统,并验证功能需求是否得到满足

      旨在测试“单元”,即系统构建的功能或方法。它有时被称为开发人员测试。事实上,单元测试可能很难,这就是为什么要编写测试b