代码审查期间的单元测试不能替代开发期间的单元测试。
从直觉上来说,您的建议很有意义。该评论有什么用?检查代码是否正确。测试是为了什么?检查代码是否正确。那么为什么不将两者结合起来呢?
这就是为什么。
对代码进行测试是艰巨的工作。编写只对一件事有意义的代码是一回事。编写可以进行有效测试的代码是另一回事。现在代码可以在“实际工作”和“测试”两种情况下运行的事实要求更大的灵活性,要求该代码能够以有意义的方式独立存在。
编写代码以使其可测试是额外的工作和技巧。重构别人的代码以实现可测试性(如果一开始就没有考虑到可测试性的话)可能是一项主要任务。
您正在开发人员和审阅者之间重复工作。大概,您的开发人员不会在没有至少一定程度的信心的情况下将其代码提交审查。他已经需要测试代码。现在,存在不同的测试级别和范围。质量检查人员在开发人员和审核人员之后对代码进行测试。但是,无论范围,你认为是适当的开发和评审,这是没有意义的开发商要弄清楚如何测试代码,这个水平一次,但让他测试一次性和难以复制,然后将在审稿到再次进行测试,这一次是自动化且可重复的。你只是有两个在编写相同的测试,他们的投资时间-一旦不佳,一次良好。
您正在将审查变成更长,更费力的步骤。如果测试是审查过程的主要部分,那么当某些测试失败时会发生什么?审稿人负责使测试全部运行,因此她还需要调试代码吗?还是要来回敲击,一项写作测试,另一项使它们通过?
有时,您可以编写一大堆相互正交的测试,因此您不需要乒乓球。审阅者编写了十二个测试,其中一半失败,开发人员修复了错误,所有测试仍然有效,并且现在通过。但是...很多时候,您遇到了阻止程序错误,或者需要重新设计和更改API的错误,或者没有。如果您要承担在审阅者和开发人员之间来回传递测试的责任,那么您实际上不在审阅阶段。你还在发展。
需要编写测试并不能激发更全面的审查。从根本上讲,这意味着您越深入,必须编写的测试就越多,并且可能它们将是需要深入系统的硬测试。
与编写测试的开发人员相比,他的动机是:如果我不编写重要的测试,审阅者将在审阅中指出。
如果审阅者需要检查代码的全面测试,甚至是审阅者,那么如果她需要自己决定何时可以停止编写深度挖掘测试并只需执行代码审阅,就可以对系统有更好的了解。
如果开发人员未编写单元测试,则审阅者也不会。采用测试作为普遍做法存在许多障碍。也许您承受的压力太大,并且很难测试您的代码库。也许您没有那么丰富的测试经验,并且觉得您负担不起学习曲线。也许您有个斧头杀人犯,向编写测试的人发送了威胁性笔记。我不知道!
但是,无论原因是什么,可以肯定地认为,它同样适用于审阅者和开发人员。如果团队感到压力很大,那么审阅者没有比开发者更多的时间(如果她愿意,则可以重新分配工作,这样人们就不会那么紧张)。如果没有人知道如何很好地编写单元测试,那么审阅者可能也不会这样做(如果她这样做,则应该坐下来教队友)。
这个建议听起来像是试图将钱从一个同事转移到另一个同事。而我只是没有看到任何方式,为工作顺利,首先是因为它真的很难(不健康),以产生一种情形,一个人是唯一一个谁可以做测试,和其他人不能做完全没有任何测试。
什么做的工作是具有审查盖测试以及。如果开发人员已经编写了十个测试,那么与开发人员没有编写任何测试相比,审阅者更有可能建议另外十个测试。
而且,如果测试极端情况是一项主要任务,那么在整个团队中更广泛地分发它可能是有意义的。**一旦代码可以首先进行测试,编写更多测试就变得容易得多。**
回顾是发现关键案例的好时机。而且,如果审阅者可以加入并为她发现的极端情况编写测试,那么嘿-更好!但总的来说,假设审阅者可以在开发人员听起来不是一个很糟糕的主意的地方编写测试。