Testing 自动化测试没有帮助的场景
在什么情况下,单元测试和TDD之类的东西比它们的价值更麻烦 我想到的一些东西是:Testing 自动化测试没有帮助的场景,testing,tdd,Testing,Tdd,在什么情况下,单元测试和TDD之类的东西比它们的价值更麻烦 我想到的一些东西是: 生成测试数据时很棘手:有时,能够生成有效的、非平凡的测试数据本身就是一个挑战 当验证代码正确性的唯一实用方法是运行它时 当您测试设计的视觉元素时 还有什么其他情况吗?我不确定这是否有用。在某些情况下,它可能更困难,您可能会选择不使用它——例如,在UI的可视化布局中。也可能有浪费精力的时候——例如,单元测试设计器生成的代码或框架不是您编写的。生成数据不应该成为单元测试的障碍。您的测试应该足够小,并且足够集中,这样
- 生成测试数据时很棘手:有时,能够生成有效的、非平凡的测试数据本身就是一个挑战
- 当验证代码正确性的唯一实用方法是运行它时
- 当您测试设计的视觉元素时
还有什么其他情况吗?我不确定这是否有用。在某些情况下,它可能更困难,您可能会选择不使用它——例如,在UI的可视化布局中。也可能有浪费精力的时候——例如,单元测试设计器生成的代码或框架不是您编写的。生成数据不应该成为单元测试的障碍。您的测试应该足够小,并且足够集中,这样您通常不需要为任何单个测试生成整个数据集,因此模拟在这些情况下是非常有用的技术。如果我发现自己一遍又一遍地模仿同样的东西,我有时会将它合并成一个所有测试都可以依赖的假数据库类
无论是单元测试还是运行代码都无法验证其正确性。单元测试可以帮助消除bug,特别是使用TDD,并确保发现的bug得到修复。如果需要确保代码正确,则需要应用不同的、基于逻辑的技术来证明正确性。这些都超出了单元测试的范围。我不会说在任何情况下,自动化测试都是无益的 当然,也有一些地方的帮助不大。我不认为创建夹具数据是其中之一。有一些工具可以提供帮助,比如(至少在Ruby中)。事实上,如果你的模型太复杂了,你需要创建一个具有各种关联的十二个对象,我会考虑代码的味道,也许模型并不是那么简单。 也就是说,在一些情况下,缺点可能大于优点。前几天我写了一些代码,它派生了一个外部进程。我不关心输出,我不关心返回代码,我甚至不关心它是否工作正常,它完全是一个火和忘记,如果有什么不正常的工作,另一个进程会来清理,稍后
在这种情况下,我没有费心编写任何测试,因为这样做的好处不值得花时间设置一个假的外部程序来验证我的论点等等。我相信你的前两点是无效的
- 创建测试数据可能是一个挑战(事实上,它通常是编写单元测试的主要部分),但这只是您必须接受的东西,而不是放弃单元测试的理由。这不可能是不可能的,否则你怎么知道你的应用程序工作正常
- 单元测试运行代码是为了验证其正确性——我看不出问题所在
单元测试可能不适用的一种情况是,当您面对一个现有的应用程序时,该应用程序的开发并没有考虑到可测试性甚至模块性(反模式)。但即便如此,如果您知道必须在相当长的一段时间内维护和扩展这个beast,那么找到一种方法来自动测试应用程序的至少一些部分几乎总是可能和有用的。没有人说在做任何其他事情之前,你必须编写一个测试套件来实现100%的代码覆盖率。只是一些随机的想法:
但这些都是无关紧要的情况。我还认为,它们几乎总是可能的,而且从长远来看,回报往往比你一开始投资的回报更多。我坚信深思熟虑的测试;然而,我发现单元测试和TDD主要是浪费时间 从经验的角度来看:
- 单元测试只捕获最明显的错误
- 如果开发人员一直通过单元测试发现bug,我会替换它们
- 如果我将开发外包给班加罗尔的一家车身车间,我会实施单元测试。否则,我将坚持与强大的开发人员合作——从长远来看,这些人更具成本效益李>
* When generating test data is tricky: Sometimes, being able to come up with valid, non trivial test data is a challenge in itself.
* When the only practical way of verifying correctness of the code is to run it.
* When you're testing visual elements of the design.