你是支持单元测试还是验收测试?或者两种都支持?
我的理解是:
- 单元测试:从开发人员的角度验证系统
- 帮助开发人员实践TDD
- 保持代码模块化
- 有助于在较低粒度上检测错误
验收测试:
- 从业务和QC/QA的角度验证系统
- 通常由不熟悉代码内部工作原理的人编写,因此更高层次
我认为两者都是必要的。但是,为了减少重复工作,将单元测试纳入验收测试中是否明智?换句话说,让后者调用前者。反过来做有没有意义呢?
你对单元测试和验收测试有何想法?如何管理它们之间的关系?
你是支持单元测试还是验收测试?或者两种都支持?
我的理解是:
验收测试:
我认为两者都是必要的。但是,为了减少重复工作,将单元测试纳入验收测试中是否明智?换句话说,让后者调用前者。反过来做有没有意义呢?
你对单元测试和验收测试有何想法?如何管理它们之间的关系?
验收和集成测试可以告诉您代码是否正常工作并且完整; 单元测试可以告诉您它在哪里出了问题。
如果您已经对验收和集成测试做得很好,并且它们通过了,那么您的代码将实现所有应该实现的功能,并且它是可用的。这很不错(也很好知道它不行)。 但是,如果不起作用,则验收测试不会让您了解发生了什么错误;因为它测试了许多功能单元,所以它可能是一种鸟瞰失败的视图。这就是单元测试脱颖而出的地方。良好的单元测试可以确切地告诉您出了什么问题,以及哪个部分的代码有问题。比起验收测试,确定是否编写了足够的单元测试更加困难,但当您遇到验收测试失败却没有相应的单元测试失败时,就需要编写单元测试了。
这只是从测试角度来看。当然,TDD(测试驱动开发)并不是关于测试。就设计驱动而言,验收测试为您提供了一个广泛的路线图(“这是您想要去的地方”),而单元测试则带您走向下一个交叉口(“向左转”)。在这方面,它们都很有价值,而且它们的价值互补。
不要混淆它们;不要混合使用它们。特别是单元测试不应该依赖于其他任何内容,通过让验收测试依赖于它们来限制您的单元测试将是一个错误。当然,它们可以共享一些框架代码,但它们应该是独立的。
总结以上内容:
所有的测试都很重要。没有任何一种特定类型的测试可以作为其他任何一种测试的超集或子集。它们总是部分重叠的集合。试图将它们组合起来以某种方式节省一些工作可能会被证明是浪费时间。
更多的测试比任何其他东西都更好。所有测试的联合比试图强制在测试之间建立子集-超集关系更有价值。
单元测试 - 确认我的特定函数只做它应该做的事,没有多余或少于的内容。
验收测试 - 确认我的应用程序能够正常工作。
例如:一个计算二次函数根的应用程序。它接受a、b和c三个参数,返回x1和x2两个答案。该应用程序是由我编写的函数构建的,这些函数包括加法、减法、乘法、除法和平方根等基本运算。
单元测试 - 检查我的除法和乘法函数是否正确工作,以及我的平方根、加法和减法函数是否正确。
验收测试 - 确认我的应用程序能够计算二次函数的根。
由于我的整个应用程序的目的就是计算根,所以不应该对计算根进行单元测试,因为没有单独执行该功能的函数。